Php 防火墙重定向到已翻译页面

Php 防火墙重定向到已翻译页面,php,symfony,login,internationalization,fosuserbundle,Php,Symfony,Login,Internationalization,Fosuserbundle,我有一个安装了FOSUserBundle的Symfony2项目。当用户尝试访问时,系统会将其重定向到。 这是我的security.yml文件: jms_security_extra: secure_all_services: false expressions: true security: encoders: Symfony\Component\Security\Core\User\User: plaintext FOS\UserBundle\Model\UserInterf

我有一个安装了
FOSUserBundle
的Symfony2项目。当用户尝试访问时,系统会将其重定向到。 这是我的
security.yml
文件:

jms_security_extra:
secure_all_services: false
expressions: true

security:
encoders:
    Symfony\Component\Security\Core\User\User: plaintext
    FOS\UserBundle\Model\UserInterface: sha512

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    in_memory:
        memory:
            users:
                user:  { password: userpass, roles: [ 'ROLE_USER' ] }
                admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        logout:       true
        anonymous:    true

    login:
        pattern:  ^/demo/secured/login$
        security: false

    secured_area:
        pattern:    ^/demo/secured/
        form_login:
            check_path: /demo/secured/login_check
            login_path: /demo/secured/login
        logout:
            path:   /demo/secured/logout
            target: /demo/
        #anonymous: ~
        #http_basic:
        #    realm: "Secured Demo Area"

access_control:
    - { path: /login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: /register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: /resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: /admin/, role: ROLE_ADMIN }
    - { path: /forum/, role: ROLE_USER }
现在,我已重新生成URL,以便根据本教程进行翻译:

所有这些都可以正常工作,但我尝试访问时除外,因为它重定向到而不是

我错过了什么

更新:

由于我在
main
(登录路径)添加了一行代码:


它重定向到而不是,而其他URL保留
/en/
URL。实际上,
/es/
不存在,因为它是默认语言。有什么建议吗?

您还应该为登录路径创建路由,如下所示:

login_path:
    path: /{_locale}/login

您不需要控制器定义,只需在
security.yml
中替换登录路径:/demo的行即可。。。。登录路径:登录路径

防火墙更改为下一个代码片段非常有效

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

它不起作用。但多亏了你,我才前进了。你可以看看我更新过的问题。无论如何,按照我在那里写的那样创建一个路由,这会更容易,也许你需要使用一个可以处理区域设置的侦听器。如果您只需转到url/en/login,会发生什么?如果您查看我遵循的教程,您将看到我安装了一个自动生成路由的捆绑包。
main:
    pattern: ^/
    form_login: 
        login_path: fos_user_security_login
        check_path: fos_user_security_check
        provider: fos_userbundle
        csrf_provider: form.csrf_provider
    logout:
        path: fos_user_security_logout
        target: fos_user_security_login
    anonymous:    true