Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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 通过JMSI18nRoutingBundle在URL中使用Symfony语言环境_Php_Symfony_Security_Internationalization - Fatal编程技术网

Php 通过JMSI18nRoutingBundle在URL中使用Symfony语言环境

Php 通过JMSI18nRoutingBundle在URL中使用Symfony语言环境,php,symfony,security,internationalization,Php,Symfony,Security,Internationalization,我将Symfony 3.3与 捆绑包将用户区域设置放在路由前面。这工作很好,直到我必须登录或注销,这些都不工作 我总是遇到以下错误: Unable to find the controller for path "/en/admin/logout". The route is wrongly configured. 这是my security.yml的一部分,涉及登录/注销: security: firewalls: main: anonymous: ~

我将Symfony 3.3与

捆绑包将用户区域设置放在路由前面。这工作很好,直到我必须登录或注销,这些都不工作

我总是遇到以下错误:

Unable to find the controller for path "/en/admin/logout". The route is wrongly configured.
这是my security.yml的一部分,涉及登录/注销:

security:
    firewalls:
        main:
        anonymous: ~
        pattern: ^.*/admin
        form_login:
            login_path: /{_locale}/admin/login
            check_path: /{_locale}/admin/login
            [...]
        logout:
            path: /{_locale}/admin/logout
            target: /{_locale}/admin/login


access_control:
    - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, roles: ROLE_ADMIN }
对于登录路径,请检查路径,等等。我也尝试过用{u locale}、.*和斜杠(/)代替,但都不起作用

管理员注销在my routing.yml中配置:

admin-logout:
    path: /admin/logout
当使用path('admin-logout')时,我会得到一个包含区域设置的URL,但当我单击它时,它只会再次显示上面的错误消息。 登录也不起作用,但我可以显示登录页面,但在输入凭据后,它只是刷新页面而没有登录

有人知道如何让登录/注销重新工作吗


编辑:

感谢nifr,我可以解决它,我应该使用路由名称,而不是security.yml中的路径,这就是我最终得到的结果:

security:
    firewalls:
        main:
        anonymous: ~
        pattern: admin
        form_login:
            login_path: admin-login
            check_path: admin-login
        [...]
        logout:
            path: admin-logout
            target: admin-login

     [...]

我没有在routing.yml中更改任何内容,因为JMSI18nRoutingBundle已经将区域设置占位符放在了路由前面(如果您确实将{u locale}放在了那里,那么最终的路由是:/en/en/admin/)

登录路径
检查路径
在使用路径时不支持占位符(即
/xy/{z}

您需要使用路线的名称并为任何占位符定义一个默认值

登录路径和检查路径也可以是路由名称(但不能有 强制通配符-例如/login/{foo},其中foo没有默认值 价值)

(Symfony文档-)

以下路由定义和安全配置示例将起作用:

# routing.yml
login_route_name:
  path:      /{_locale}/login
  defaults:
    _locale: 'en'
    _controller: app.controller_service.security:login
login_check_route_name:
  path:      /{_locale}/login/check
  defaults:
    _locale: 'en'
    _controller: app.controller_service.security:loginCheck

# security.yml
security:
  firewalls:
    firewall_name:
      # [..]
      form_login:
        login_path: login_route_name
        check_path: login_check_route_name
使用JMSi18nBundle时,您可以使用
debug:router
命令查找登录/检查路由的名称。例如:

bin/console debug:router | grep -i login

谢谢!这就是我需要的。我没有在routing.yml中更改任何内容,但在我的security.yml中使用了路由名称(正如您所建议的),这就是所需的全部内容