gpt4 book ai didi

symfony - FOSUserBundle登录时的区域设置切换

转载 作者:行者123 更新时间:2023-12-04 02:59:02 25 4
gpt4 key购买 nike

我正在尝试在应用程序的登录屏幕中进行语言环境切换。为此,我在登录页面上具有指向site.com/(默认语言环境)和site.com/en(我支持的第二个语言环境)的链接。登录后,切换就像 super 按钮一样。但是,如果我尚未通过身份验证,则登录名始终会返回到默认语言环境。我的理解是,如果我使用FOSUserBundle中的命名路由,那么它应该能够自动处理语言环境,但是我无法使其正常工作。

我的app/config/security.yml

security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512

role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
fos_userbundle:
id: fos_user.user_provider.username

firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: fos_user_security_login
check_path: fos_user_security_check
logout: true
anonymous: true

access_control:
- { path: ^/_wdt, roles: IS_AUTHENTICATED_ANONYMOUSLY } # allow wdt for debugging
- { path: ^/_profiler/, role: IS_AUTHENTICATED_ANONYMOUSLY } # allow profiler for debugging
- { path: ^/bundles/, role: IS_AUTHENTICATED_ANONYMOUSLY } # allow assets to be loaded anonymously

- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, role: ROLE_ADMIN }
- { path: ^/, role: ROLE_USER }

我的app/config/routing.yml
# FOS User bundle
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"

fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /profile

#fos_user_register:
# resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
# prefix: /register

fos_user_resetting:
resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
prefix: /resetting

fos_user_change_password:
resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
prefix: /profile

任何指针都值得赞赏,因为我已经坚持了几天

最佳答案

我不知道您如何处理语言环境检测/切换,但是使用JMSI18nRoutingBundle可以执行以下操作。

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

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

配置捆绑包:
jms_i18n_routing:
default_locale: en
locales: [en, fr, it, sp]
strategy: prefix

引导捆绑包:
$bundles = array(
...
new JMS\I18nRoutingBundle\JMSI18nRoutingBundle(),
new FOS\UserBundle\FOSUserBundle(),
);

修改现有路由,以所需的语言作为前缀:
access_control:
# Routes are prefixed by ther user locale.
- { path: ^/[^/]+/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/[^/]+/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/[^/]+/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/[^/]+/admin, role: ROLE_ADMIN }
- { path: ^/[^/]+/, role: ROLE_USER }

现在应该可以了!

关于symfony - FOSUserBundle登录时的区域设置切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17207463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com