翻译symfony2路由错误

时间:2013-01-17 12:51:47

标签: symfony internationalization routing

访问/login时出错:

  

找不到“GET / login”

的路线

当我尝试访问/en/login时重定向我登录但我收到同样的错误。

在我的routing.yml中,我有:

login:
    pattern:   /{_locale}/login
    defaults:  { _controller: miomioBundle:Security:login}
    requirements:
        _locale: es|en|de
    options:
      expose: true

2 个答案:

答案 0 :(得分:0)

这听起来像你有两个不同的问题。

  1. 路由/登录不存在。您已经在/ es / login,/ en / login和/ de / login之上设置了三条路线,但没有设置/登录。

  2. 您必须拥有一些访问控制设置,不允许上述三条路由是未经身份验证的用户访问,因此您将被重定向到/ login进行身份验证...但如第1点所述路由确实不存在。

  3. 要解决第1点,您实际上需要设置一个处理登录表单的路径。请参阅Symfony文档了解分步方法:http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form

    对于第2点,您需要在security.yml文件中设置一些访问控制,以允许用户无需登录即可访问您的登录页面:

    access_control:
      - { path: ^/es/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
      - { path: ^/en/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
      - { path: ^/de/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    

    您必须已拥有如下所示的访问控制,否则您的登录页面将在无限循环中崩溃:

    access_control:
          - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    

    我必须说,如果它只是一个简单的登录表单,那么通过坚持使用1个登录表单并使用翻译处理标签和登录文本可以更好地服务。 http://symfony.com/doc/master/book/translation.html

答案 1 :(得分:0)

查看JMSTranslation Bundle以及JMSI18nRoutingBundle可能对您更感兴趣的内容。 JMSI18nRoutingBundle允许您指定路由在config.yml文件中的工作方式。

如果您希望您的URL使用默认语言环境进行/登录,您可以设置如下内容:

jms_i18n_routing:
  default_locale: en
  locales: [de, en]
  strategy: prefix_except_default

但是,如果您希望您的网址始终包含区域设置,例如:en / login或de / login,您需要将stratagy参数更改为“prefix”

jms_i18n_routing:
  default_locale: en
  locales: [en, de]
  strategy: prefix