php - Explain Symfony's "sticky" locale event listener -


symfony's cookbook proposes following recipe make locale "sticky" during user's session:

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)),         );     } } 

can explain following 3 points:

  1. why return if ! $request->hasprevioussession()?
  2. int following if/else, why set locale $request->getsession()->set('_locale') in if block? why not using $request->setlocale() in else block?
  3. what "must registered before default locale listener" mean?

this event make _locale it's been submitted current request though may come session (but _locale might in request - e.g. when user changes locale - in case updated session object new value).

to answer questions.

  1. if there no session object, skip event redundant (value cannot in session doesn't exist).

  2. sync _locale's value between session , request, favoring request's version.

  3. as localelistener event handles locale issues, above needs happen before event runs. onkernelrequest 1 of first events gets triggered can sure case.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -