Symfony2: Rückwärts-Uri (Referrer), die während der switching-locale

Ich würde gerne verwirklichen locale-switcher, aber es scheint mit kein Glück...

Den code unten funktioniert nicht, da die (Referrer) enthält den alten Wert von locale...

Wie kann ich die Umleitung auf die alten Referrer-URI mit einem neuen Wert von locale?

-- routing.yml

hello:
  pattern:  /{_locale}/hello/{name}
  defaults: { _controller: JetInformBundle:Default:index, name: 'alexander' }
  requirements:
    _locale: ^en|de|ru|uk$

about:
  pattern:  /{_locale}/about
  defaults: { _controller: JetInformBundle:Default:about }
  requirements:
    _locale: ^en|de|ru|uk$

locale:
  pattern:  /locale/{locale}
  defaults: { _controller: JetInformBundle:Locale:index }

-- 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)
    {
        $request->getSession()->set('referrer', $request->getRequestUri());
        return $this->render('JetInformBundle:Default:index.html.twig',
                             array('name' => $name));
    }

    public function aboutAction(Request $request)
    {
        $request->getSession()->set('referrer', $request->getRequestUri());
        return $this->render('JetInformBundle:Default:about.html.twig'));
    }
}

-- LocaleController.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 LocaleController extends Controller
{
    public function indexAction($locale, Request $request)
    {
        $session = $request->getSession();

        if ($request->hasSession())
            $session->setLocale($locale);

        return $this->redirect($session->get('referrer'));
    }
}

-- index.html-Code.Zweig

{% extends '::base.html.twig' %}

{% block body %}
<h1>{% trans %}hello.name{% endtrans %} {{ name }}!</h1>
<h3>{% trans %}your.locale{% endtrans %} [{{ app.request.get('_locale') }}]</h3>

{% include 'JetInformBundle:Default:locales.html.twig' %}

<div>
    <p>{% trans%}return.to{% endtrans%} <a href="{{ path('about', { '_locale':   app.request.get('_locale') }) }}">About</a></p>
</div>
{% endblock %}

-- locales.html.twig

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

InformationsquelleAutor Alexander Vasilenko | 2011-09-14

Schreibe einen Kommentar