0

如果访问 a 的错误/login是:

找不到“GET /login”的路线

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

在我的 routing.yml 我有:

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

2 回答 2

0

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

  1. 路由 /login 不存在。您已经在 /es/login、/en/login 和 /de/login 上方设置了三个路由,但没有单独设置 /login。

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

要解决第 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

于 2013-01-17T16:24:32.103 回答
0

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

如果您希望您的 URL 使用默认区域设置为 /login,您将设置如下内容:

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

但是,如果您希望您的网址始终包含语言环境,例如:en/login 或 de/login,您需要将策略参数更改为“前缀”

jms_i18n_routing:
  default_locale: en
  locales: [en, de]
  strategy: prefix
于 2013-01-17T19:17:55.550 回答