Symfony2:粘性语言并不总是坚持

时间:2015-08-04 09:42:03

标签: php symfony session locale

我有一个奇怪的问题,以前从未发生过。粘性语言总是不起作用。

在执行这些步骤时,它会开始工作一段时间:

  1. 转到开发环境
  2. 点击分析器
  3. 回到开发环境
  4. 切换语言
  5. 转到生产环境
  6. Viola,这种粘性语言现在有效。

    我尝试了几种方法,谷歌搜索,stackoverflowed,使用自己的大脑来定制语言处理以多种方式。例如,设置一个自定义会话变量然后根据其值我尝试设置请求语言和语言到会话。但是一旦页面加载,这个原生会话变量就会丢失,包括请求参数。

    这是我当前的LocateListener巫婆如上所述:

    class LocateListener implements EventSubscriberInterface
    {
    
    private $defaultLocale;
    
    public function __construct($defaultLocale = 'sk')
    {
        $this->defaultLocale = $defaultLocale;
    }
    
    public function onKernelRequest(GetResponseEvent $event)
    {
        $request = $event->getRequest();
        if (!$request->hasPreviousSession())
        {
            return;
        }
    
        // try to see if the locale has been set as a _locale routing parameter
        if ($locale = $request->attributes->get('_locale'))
        {
            $request->getSession()->set('_locale', $locale);
           // echo "locale changed";
        }
        else
        {
            // if no explicit locale has been set on this request, use one from the session
            $request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
            $request->getSession()->set('_last_locale_url', $actual_link = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
        }
    }
    
    public static function getSubscribedEvents()
    {
        return array(
            // must be registered before the default Locale listener
            KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
        );
    }
    
    }
    

    处理语言切换的控制器操作:

    public function switchlangAction(Request $req)
    {
        return $this->redirect($req->headers->get("referer"));
    }
    

    路由:

    erik_app_switchlang:
    path:      /locale/{_locale}
    defaults: { _controller: ErikAppBundle:Default:switchlang }
    requirements:
        _locale:  sk|en
    

    会话配置:

        session:
        cookie_domain: netlime.tk
        cookie_lifetime:         3600 
        cookie_httponly:         false 
    

    注册语言环境侦听器的方式

    app.locale_listener:
        class: Erik\AppBundle\Service\LocateListener
        arguments: ["%kernel.default_locale%"]
        tags:
            - { name: kernel.event_subscriber, priority: 17 }
    

    我正在谈论的网站是https://www.netlime.tk app_dev是允许的,如果需要,您可以尝试。 http://tvarplast.sk网站使用相同的粘性语言代码运行。

    Netlime使用comodo证书在数字海洋上的自定义vps上运行。

    谢谢!

    ---编辑 -

    这是我的安全档案

    security:
    encoders:
        Erik\UserBundle\Entity\User: 
            algorithm:          md5
            iterations:        0
            encode_as_base64:   false
    
    providers:
        user_db:
            entity: { class: ErikUserBundle:User, property: email }
    
    firewalls:
        main:
            pattern: ^/
            provider: user_db
            form_login:
                login_path:     /account/signin
                check_path:    /account/signin/check
            logout:
                path:   /account/signout
                target: /
            security:     true
            anonymous:    true
    
    access_control:
        - { path: ^/account/edit, roles: [ROLE_USER,ROLE_COMPANY,ROLE_ADMIN,ROLE_SUPER_ADMIN,ROLE_SONATA_ADMIN] }
        - { path: ^/admin, roles: [ROLE_ADMIN,ROLE_SUPER_ADMIN,ROLE_SONATA_ADMIN] }
        - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    

0 个答案:

没有答案