到目前为止,当我抛出时,我的“TwigBundle”自定义error404.html.twig页面在生产模式下正确显示:
$this->createNotFoundException('whatevs');
但是,当Symfony抛出“NotFoundHttpException”时(例如每当找不到路由时),“找不到路由”页面确实显示在app_dev上,提到“404 Not Found”,但在生产模式下它只是显示空白页面......
根据Symfony文档,这似乎不正常:“createNotFoundException()方法创建一个特殊的NotFoundHttpException对象,最终在Symfony中触发404 HTTP响应。”
那为什么我不能得到同样的行为?有什么我想念的吗?
我正在使用主分支。
编辑:这是我的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] }
答案 0 :(得分:0)
有同样的问题。请参阅https://github.com/symfony/symfony/issues/5320您可能正在errorpage或layout.html.twig上调用is_granted。阅读Stof如何解决这个问题的答案。
答案 1 :(得分:0)
https://github.com/symfony/symfony/issues/5320中的每个Stof:
“你避免在错误页面中调用is_granted(或者你只在app.user不为null时才会这样做,这在没有令牌或令牌是匿名时会发生。)问题是路由器在防火墙之前运行。因此,如果路由器抛出异常,因为它与路由不匹配,则您的错误页面不在防火墙后面(因为它没有被调用)。“