Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 在登录和注销后丢失当前本地语言_Php_Symfony_Routing_Fosuserbundle - Fatal编程技术网

Php 在登录和注销后丢失当前本地语言

Php 在登录和注销后丢失当前本地语言,php,symfony,routing,fosuserbundle,Php,Symfony,Routing,Fosuserbundle,我可以正确地切换网站的语言,但当我登录时,我在url中丢失了当前语言。例如,登录前和登录后,我有这个 symfony2.7始终采用区域设置:fr。我使用FosUserBundle。我发现我可以使用bundle来解决这个问题,但我认为我可以通过编辑configuration来解决这个问题。 登录后,我按照默认的\u目标\u路径重定向网站:幻灯片\u索引,如下所示 app_slideshow: resource: "@AppBundle/Resources/config/routing/sl

我可以正确地切换网站的语言,但当我登录时,我在url中丢失了当前语言。例如,登录前和登录后,我有这个 symfony2.7始终采用区域设置:fr。我使用FosUserBundle。我发现我可以使用bundle来解决这个问题,但我认为我可以通过编辑configuration来解决这个问题。 登录后,我按照默认的\u目标\u路径重定向网站:幻灯片\u索引,如下所示

app_slideshow:
    resource: "@AppBundle/Resources/config/routing/slideshow.yml"
    prefix:   /{_locale}/admin/slideshow


您可以使用

将所需的捆绑包添加到composer.json:

"require": {
    ...
    "jms/i18n-routing-bundle": "1.1.*",
    "jms/translation-bundle": "1.1.*",
    "friendsofsymfony/user-bundle": "1.3.*"
},

JMS路由包的链接

但在你安装它之前,请看一下这个简短的视频教程。本教程帮助我了解了fos用户包和url中的区域设置之间存在的问题

如果您不想在composer.json文件中安装jms路由捆绑包,可以使用以下命令安装它
php composer.phar require jms/i18n路由捆绑包“dev master”

这是我的配置:

jms_i18n_routing:
    default_locale: "%locale%"
    locales: ["fr", "en"]
    strategy: prefix_except_default
Security.yml:

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_token_generator: security.csrf.token_manager
            require_previous_session: false
            login_path: fos_user_security_login
            check_path: fos_user_security_check
            default_target_path: your_route_name_homepage
        logout:
            path: fos_user_security_logout
            target: your_route_name_homepage        
        anonymous: true


        access_control:
             - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY  }
             - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }
             - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
             - { path: ^/admin/, role: ROLE_ADMIN }

安装Jms路由包后。尝试执行命令
debug/router
(symfony 3)并查看路由名称和前缀。

我今天早上通过安装jms路由捆绑包解决了这个问题。请给我jms路由捆绑包的链接我会在2分钟内给你写一个完整的答案。通过链接和配置。在我的访问控制中,我应该添加/en/和/fr/否则我可以访问管理员而无需身份验证-{path:^/en/admin/,role:role_admin}-{path:^/fr/admin/,role:role_admin}@Mintho433你认为我的解决方案是合理的吗!?谢谢我更新了我的答案,向您展示了我的访问控制密钥中的内容。
firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_token_generator: security.csrf.token_manager
            require_previous_session: false
            login_path: fos_user_security_login
            check_path: fos_user_security_check
            default_target_path: your_route_name_homepage
        logout:
            path: fos_user_security_logout
            target: your_route_name_homepage        
        anonymous: true


        access_control:
             - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY  }
             - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }
             - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
             - { path: ^/admin/, role: ROLE_ADMIN }