Symfony2: реализация локального коммутатора без сеанса / контроллера

Итак, кажется, все нормально после 3,5 часов ……

Две страницы:

localhost.lo / хх / о

localhost.lo / хх / привет / {имя}

где xx – несколько локалей, описанных в routing.yml

– routing.yml

home: resource: "@JetInformBundle/Resources/config/routing.yml" prefix: /{_locale} requirements: _locale: ^en|de|ru|uk|pl$ 

– JetInformBundle routing.yml

 hello: pattern: /hello/{name} defaults: { _controller: JetInformBundle:Default:index, name: 'alexander' } about: pattern: /about defaults: { _controller: JetInformBundle:Default:about } 

– DefaultController.php

 <?php namespace Jet\InformBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Symfony\Component\HttpFoundation\Request; class DefaultController extends Controller { public function indexAction($name, Request $request) { return $this->render('JetInformBundle:Default:index.html.twig', array('name' => $name, 'matches' => $this->matchAction($request))); } public function aboutAction(Request $request) { return $this->render('JetInformBundle:Default:about.html.twig', array('matches' => $this->matchAction($request))); } protected function matchAction(Request $request) { return $this->get('router')->match($request->getRequestUri()); } } 

– index.html.twig

 {% extends '::base.html.twig' %} {% block body %} <h1>{{ 'hello.name'|trans }} {{ name }}!</h1> <h3>{{ 'your.locale'|trans }} [{{ app.request.get('_locale') }}]</h3> {% include 'JetInformBundle:Default:locales.html.twig' with { 'uripath': 'hello', 'params': { 'name': app.request.get('name') } } %} {% include 'JetInformBundle:Default:matches.html.twig' with { 'matches': matches } %} <div> <p>{{ 'return.to'|trans }} <a href="{{ path('about', { '_locale': app.request.get('_locale') }) }}">About</a></p> </div> {% endblock %} 

– about.html.twig

 {% extends '::base.html.twig' %} {% block body %} <h1>{% trans %}about.page{% endtrans %}</h1> <h3>{% trans %}your.locale{% endtrans %} [{{ app.request.get('_locale') }}]</h3> {% include 'JetInformBundle:Default:locales.html.twig' with { 'uripath': 'about', 'params': {}} %} {% include 'JetInformBundle:Default:matches.html.twig' with { 'matches': matches } %} <div> <p>{% trans%}return.to{% endtrans%} <a href="{{ path('hello', { 'name': app.request.get('name'), '_locale': app.request.get('_locale') }) }}">Hello</a></p> </div> {% endblock %} 

– locales.html.twig

 {% if not params %} {% set params = {} %} {% endif %} <div class="langs"> <ul> <li> {% if app.request.get('_locale') == 'ru' %} Русский {% else %} <a href="{{ path(uripath, params|merge({ '_locale': 'ru' })) }}">Русский</a> {% endif %} </li> <li> {% if app.request.get('_locale') == 'en' %} English {% else %} <a href="{{ path(uripath, params|merge({ '_locale': 'en' })) }}">English</a> {% endif %} </li> <li> {% if app.request.get('_locale') == 'uk' %} Украiнська {% else %} <a href="{{ path(uripath, params|merge({ '_locale': 'uk' })) }}">Украiнська</a> {% endif %} </li> <li> {% if app.request.get('_locale') == 'de' %} Deutsch {% else %} <a href="{{ path(uripath, params|merge({ '_locale': 'de' })) }}">Deutsch</a> {% endif %} </li> <li> {% if app.request.get('_locale') == 'pl' %} Polish {% else %} <a href="{{ path(uripath, params|merge({ '_locale': 'pl' })) }}">Polish</a> {% endif %} </li> </ul> </div> 

– matches.html.twig

 <h5>Matches</h5> <ol> {% for key, value in matches %} <li>{{ key }} : {{ value }} </li> {% endfor %} </ol> 

Решение без сеанса на основе R / W и без LocalesController с дополнительным запросом. Эй, все, о чем ты думаешь? Могут быть другие решения, другие мнения? Просто интересно … Спасибо.