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
Post a Comment