Regex FOSUserBundle:安全上下文异常,即使我有默认的主防火墙

Regex FOSUserBundle:安全上下文异常,即使我有默认的主防火墙,regex,symfony,fosuserbundle,Regex,Symfony,Fosuserbundle,我正在使用symfony2和FOSUserBundle。 我有一个用于登录的防火墙,一个用于资产,还有一个用于捕获一切的主防火墙。 当一条路由没有被任何防火墙覆盖时,我仍然会抛出“no security.context”异常,并且您尝试使用“is_grated”()访问它。 路径是mydomain/de_de/area,其中de_de部分显然是my{u locale}。 这是我的config.yml中的FOSUserBundle配置 firewalls: login_firewall

我正在使用symfony2和FOSUserBundle。 我有一个用于登录的防火墙,一个用于资产,还有一个用于捕获一切的主防火墙。 当一条路由没有被任何防火墙覆盖时,我仍然会抛出“no security.context”异常,并且您尝试使用“is_grated”()访问它。 路径是mydomain/de_de/area,其中de_de部分显然是my{u locale}。 这是我的config.yml中的FOSUserBundle配置

  firewalls:
    login_firewall:
      pattern:    ^/(de_DE|de_CH)/(login|resetting)$
      anonymous:  true
      form_login:
        provider: fos_userbundle
        login_path: fos_user_security_login
        check_path: fos_user_security_check
        csrf_provider: form.csrf_provider
      logout:
        path:   fos_user_security_logout
    assets_localeless:
      pattern:    ^/(compiled|web|js|css|_wdt|_profiler)/$
      anonymous:  true
    main:
      pattern: ^/$
      anonymous:  false
      form_login:
        provider: fos_userbundle
        login_path: fos_user_security_login
        check_path: fos_user_security_check
        csrf_provider: form.csrf_provider
      logout:
        path:   fos_user_security_logout

  access_control:
    - { path: ^/(compiled|web|js|css|_wdt|_profiler)$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/(de_DE|de_CH)/(login|resetting)$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/(de_DE|de_CH)/(my-admin|admin), role: ROLE_ADMIN }
    - { path: ^/(de_DE|de_CH)/$, role: ROLE_USER }

  role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN
编辑/解决方案:我的问题是正则表达式。我对那篇教程有一个误解。 所以模式是在普通的正则表达式中,这就是为什么我的防火墙都不能工作的原因(见答案)。 新设置如下:

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

  access_control:
    - { path: '^/(compiled|web|js|css|_wdt|_profiler)([\w\d/_-]{0,})', role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: '^/([\w]{0,})/(login|resetting|sale|imprint|contact)([\w\d/_-]{0,})', role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: '^/([\w]{0,})/(my-admin|admin)([\w\d/_-]{0,})', role: ROLE_ADMIN }
    - { path: '^/([\w]{0,})/([\w\d/_-]{0,})', role: IS_AUTHENTICATED_FULLY }

没有为mydomain/de_de/area配置防火墙。。。这就是为什么您没有该路由的安全上下文

$表示以正则表达式结尾。这就是为什么

- { path: ^/(de_DE|de_CH)/$, role: ROLE_USER }
。。。只会完全匹配

yourdomain/de_DE/
yourdomain/de_CH/

。。。没有其他路线。

好的。你能不能加上如何表达“以及下面的任何东西”?我自己就知道了(见编辑)。谢谢你指出我的错误所在。祝您有个美好的一天!