Php Symfony2随机获取禁止错误
我有一个扩展FOSUserBundle的AcmeUserBundle,我可以很好地登录。我有另一个AcmeTestBundle,可以在其中显示一些信息。 登录后,我有一个页面,上面有如下链接:Php Symfony2随机获取禁止错误,php,symfony,fosuserbundle,permission-denied,Php,Symfony,Fosuserbundle,Permission Denied,我有一个扩展FOSUserBundle的AcmeUserBundle,我可以很好地登录。我有另一个AcmeTestBundle,可以在其中显示一些信息。 登录后,我有一个页面,上面有如下链接: http://localhost/smf/web/app_dev.php/test/view/1 http://localhost/smf/web/app_dev.php/test/view/2 http://localhost/smf/web/app_dev.php/test/view/3 ..
http://localhost/smf/web/app_dev.php/test/view/1
http://localhost/smf/web/app_dev.php/test/view/2
http://localhost/smf/web/app_dev.php/test/view/3
...
它们都显示相同的页面,只是特定id的信息不同。最初登录后,一切正常,但单击几下相同的链接后,我得到:
Forbidden
You don't have permission to access /smf/web/app_dev.php/test/view/2 on this server.
当我清除缓存并等待大约一分钟后,一切都恢复正常。
看起来真的很奇怪
我的路线如下所示:
acme_test_view:
path: /test/view/{id}
defaults: { _controller: AcmeTestBundle:Default:view, id: null }
requirements:
id: \d+
methods: [GET]
public function viewAction( $id = null)
{
$item = $this->getDoctrine()
->getRepository("AcmeTestBundle:Item")
->find($id);
return $this->render("AcmeTestBundle:Default:view.html.twig", array("item" => $item));
}
默认情况下,id为null,因为如果没有提供id,我必须显示来自db的第一个条目以及所有其他条目的链接
在security.yml中,我设置了:
access_control:
- { path: ^/test/, role: ROLE_USER}
我不确定我的问题是在用户设置、路由还是完全不同的方面。
你知道我做错了什么吗
编辑:
我的操作的简化版本如下所示:
acme_test_view:
path: /test/view/{id}
defaults: { _controller: AcmeTestBundle:Default:view, id: null }
requirements:
id: \d+
methods: [GET]
public function viewAction( $id = null)
{
$item = $this->getDoctrine()
->getRepository("AcmeTestBundle:Item")
->find($id);
return $this->render("AcmeTestBundle:Default:view.html.twig", array("item" => $item));
}
只是获取数据并将其传递给模板。没什么特别的 问题可能是,您没有登录。 您已经为角色为_USER的用户创建了一个安全区域。如果您未登录,这将导致403错误 除此之外,您还应该声明另一个区域可以通过annonymous访问。可能您的登录操作也在防火墙后面,因此您无法访问登录表单 请查看并阅读“避免常见陷阱”一节
问候 您是否在viewAction中检查用户访问权限、角色或类似内容?如果你发布操作代码可能会有所帮助。我只是在我的操作中添加了一些代码,我没有做任何特别的事情。分析器底部工具栏告诉你什么?它将帮助您确定在这些特定情况下您是否被识别为用户。当探查器在那里时,它会说我已按我应该使用的方式登录。当我得到禁止的错误,没有其他信息显示在屏幕上。现在可以看到,有时这种情况也会发生在其他页面上,比如登录页面