【问题标题】:Symfony2: Custom 404 error for NotFoundHttpExceptionSymfony2:NotFoundHttpException 的自定义 404 错误
【发布时间】:2012-06-10 09:59:41
【问题描述】:

到目前为止,当我抛出时,我的“TwigBundle”自定义 error404.html.twig 页面在生产模式下正确显示:

$this->createNotFoundException('whatevs');

但是,当 Symfony 抛出“NotFoundHttpException”时(例如每当找不到路由时),app_dev 上确实会显示“找不到路由”页面,提到“404 Not Found”,但在生产模式下它只是显示一个空白页...

这似乎不正常,因为根据 Symfony 文档:“createNotFoundException() 方法创建了一个特殊的 NotFoundHttpException 对象,最终在 Symfony 中触发 404 HTTP 响应。”

那为什么我没有得到同样的行为呢?有什么我遗漏的吗?

我正在使用 master 分支。

编辑:这是我的 security.yml 文件,我正在使用 FOSUserBundle 和 FOSFacebookBundle:

security:
providers:
    chain_provider:
        chain:
            providers: [fos_userbundle, my_fos_facebook_provider]
    fos_userbundle:
        id: fos_user.user_manager
    my_fos_facebook_provider:
        id: my.facebook.user

encoders:
    "FOS\UserBundle\Model\UserInterface": sha512

firewalls:
    public:
        pattern:   ^/
        fos_facebook:
            app_url: "http://apps.facebook.com/***/"
            server_url: "http://localhost/facebookApp/"
            login_path: /login
            check_path: /checkFb
            default_target_path: /
            provider: chain_provider
        form_login:
            login_path: /login
            check_path: /login_check
            provider: chain_provider
            remember_me:   true
            csrf_provider: form.csrf_provider
        remember_me:
            key:           %secret%
        anonymous: true
        logout: true
    login:                                           
        pattern:   ^/(login$|register|resetting)  
        anonymous: true

role_hierarchy:
    ROLE_ADMIN:       ROLE_ADMIN
    ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALOOW_TO_SWITCH]
    ROLE_USER:        ROLE_USER

access_control:
    - { path: ^/, role: [IS_AUTHENTICATED_ANONYMOUSLY] }
    - { path: ^/secured/, role: [IS_AUTHENTICATED_FULLY] } # This is the route secured with fos_facebook
    - { path: ^/facebook/,           role: [ROLE_FACEBOOK] }

【问题讨论】:

    标签: symfony http-status-code-404


    【解决方案1】:

    遇到了同样的问题。请参阅https://github.com/symfony/symfony/issues/5320 您可能在 errorpage 或 layout.html.twig 上调用 is_granted。阅读 Stof 的答案如何解决这个问题。

    【讨论】:

    • 确实是问题所在!谢谢您的帮助。现在我的语言选择器出现了另一个问题,它使用了某种方式不起作用的哈希合并……但现在我确定 is_granted 是第一个阻塞在其他问题之上的问题。尽管如此,这些错误只是在生产模式下显示自定义错误页面时才会出现问题,这有点奇怪......除此之外,我的网站没有问题。
    【解决方案2】:

    https://github.com/symfony/symfony/issues/5320 中的每个 Stof:

    “您避免在错误页面中调用 is_granted(或者您仅在 app.user 不为空时才这样做,这会在没有令牌或令牌是匿名的情况下发生)。...问题是路由器在防火墙之前运行。因此,如果路由器因为与路由不匹配而引发异常,则您的错误页面不在防火墙后面(因为它没有被调用)。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-03
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 2016-04-25
      • 2013-09-16
      相关资源
      最近更新 更多