Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony3更改区域设置的链接_Php_Symfony - Fatal编程技术网

Php Symfony3更改区域设置的链接

Php Symfony3更改区域设置的链接,php,symfony,Php,Symfony,我想创建一个链接,该链接将更改下面代码中的区域设置 /** * * @Route("/changelanguage", defaults={"_locale" = "eu"}, name="changelanguage") * @Method("GET") */ public function changelanguageAction(Request $request) { $locale = $request->getLocale(); if ($locale

我想创建一个链接,该链接将更改下面代码中的
区域设置

/**
 *
 * @Route("/changelanguage", defaults={"_locale" = "eu"}, name="changelanguage")
 * @Method("GET")
 */
public function changelanguageAction(Request $request) {


    $locale = $request->getLocale();
    if ($locale == "eu") {
        $request->setLocale('es');
        $request->getSession()->set('_locale', 'es');
    } else {
        $request->setLocale('eu');
        $request->getSession()->set('_locale', 'eu');
    }

    return $this->redirect($request->headers->get('referer'));

}
然后,在我的twig base视图中,我使用以下内容:

<ul class="nav navbar-nav navbar-right">        
    <li><a href="#">{{ app.request.locale }}</a></li>
    {% if  app.request.locale == "eu"%}
        <li><a href="{{ path('changelanguage', {'_locale':'es'}) }}"><img src="{{ asset('bundles/app/img/espanol.png') }}" alt="Castellano"> Castellano</a></li>
    {% else %}
        <li><a href="{{ path('changelanguage', {'_locale':'eu'}) }}"><img src="{{ asset('bundles/app/img/euskara.png') }}" alt="Euskaraz"> Euskara</a></li>
    {% endif %}
    <li>&nbspp;</li>
</ul>
  • {%if-app.request.locale==“eu”%}
  • {%else%}
  • {%endif%}
  •  p

问题是它一直告诉我,
app.request.locale
总是
'eu'
。我缺少什么吗?

将默认语言添加到用户实体,然后创建请求侦听器,检查用户的默认语言并更改它

这是我的工作

创建一个侦听器

<?php

namespace UserBundle\EventListener;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;

class LanguageListener
{
    private $token_storage;

    private $securityContext;

    private $container;

    public function __construct(ContainerInterface $containerInterface)
    {
        $this->container = $containerInterface;
        $this->securityContext = $this->container->get('security.authorization_checker');
        $this->token_storage = $this->container->get('security.token_storage');;

    }

    public function setLocale(GetResponseEvent $event)
    {

        if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
            return;
        }


        if ($this->securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
            $userLocale = $this->token_storage->getToken()->getUser()
                ->getCustomer()->getDefaultCodeLanguage();

            if ($userLocale) {
                $request = $event->getRequest();
                $request->setLocale($userLocale);
                $translator = $this->container->get('translator');
                $translator->setLocale($userLocale);
            }
        }


    }
}

我被你的代码弄糊涂了。你想强制使用“es”吗?我想在es和欧盟地区之间切换。例如,显示具有“es”区域设置和链接的索引页将呈现相同的页面,但会更改用户区域设置并保持不变。这对我不起作用,它始终保持在相同的区域设置中
services:
    language.kernel_request_listener:
        class: UserBundle\EventListener\LanguageListener
        arguments:
            - "@service_container"
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: setLocale }