php - Symfony 2, switching language does not work -


i wonder why when click links on view switch language doesn't work. if set default locale en or km, show english language or khmer language respectively. wrong me, can not click links below switch language? please me ! many in advanced answer.

in view

<div class="col-sm-3 language-switcher">     <a href="{{ path('ngs_locale', {locale: 'en'}) }}">english</a> |     <a href="{{ path('ngs_locale', {locale: 'km'}) }}">ខ្មែរ</a> </div> 

routing.yml

ngs_locale: path:     locale/{locale} defaults: { _controller: ngshomebundle:locale:locale } 

localecontroller.php

namespace ngs\homebundle\controller;  use symfony\component\httpfoundation\request; use symfony\bundle\frameworkbundle\controller\controller;  class localecontroller extends controller {     public function localeaction(request $request, $locale)     {         /** ======== dump ========== **/         dump($locale); //"km"         $request->getsession()->set('_locale', $locale);          /** ======== dump ========== **/         dump($request->getlocale()); //"en"          $referer = $request->headers->get('referer');          /** ======== dump ========== **/         dump($referer);die; // null          if (empty($referer)) {             throw $this->createnotfoundexception('ngs_not_found');         }          return $this->redirect($referer);     } } 

localelistener.php

namespace ngs\homebundle\eventlistener;  use symfony\component\httpkernel\event\getresponseevent; use symfony\component\httpkernel\kernelevents; use symfony\component\eventdispatcher\eventsubscriberinterface;  class localelistener implements eventsubscriberinterface {     private $defaultlocale;      public function __construct($defaultlocale = 'en')     {         $this->defaultlocale = $defaultlocale;     }      public function onkernelrequest(getresponseevent $event)     {         $request = $event->getrequest();         if (!$request->hasprevioussession()) {             return;         }          // try see if locale has been set _locale routing parameter         if ($locale = $request->attributes->get('_locale')) {             $request->getsession()->set('_locale', $locale);         } else {             // if no explicit locale has been set on request, use 1 session             $request->setlocale($request->getsession()->get('_locale', $this->defaultlocale));         }     }      public static function getsubscribedevents()     {         return array(             // must registered before default locale listener             kernelevents::request => array(array('onkernelrequest', 17)),         );     } } 

service.yml

services: ngs_home.locale_listener:     class: ngs\homebundle\eventlistener\localelistener     arguments: ["%kernel.default_locale%"]     tags:         - { name: kernel.event_subscriber } 

now, fixed problem: first, changed link: locale _locale

<div class="col-sm-3 language-switcher">     <a href="{{ path('ngs_locale', {_locale: 'en'}) }}">english</a> |     <a href="{{ path('ngs_locale', {_locale: 'km'}) }}">ខ្មែរ</a> </div> 

second, changed routing.yml, locale _locale

ngs_locale:     path:     locale/{_locale}     defaults: { _controller: ngshomebundle:locale:locale  

third, changed localecontroller.php. removed $locale parameter , $locale $request->getlocale();

public function localeaction(request $request) {     $locale = $locale = $request->getlocale();     $request->getsession()->set('_locale', $locale);      $referer = $request->headers->get('referer');     if (empty($referer)) {         throw $this->createnotfoundexception('ngs_not_found');     }      return $this->redirect($referer); } 

fourth, add dependencyinjection homebundle dependencyinjection \configuration.php , dependencyinjection \ngshomeextension.php

that's !


Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

Nuget pack csproj using nuspec -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -