我有一个扩展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
...
它们都显示相同的页面,只显示特定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]
“id”默认为null,因为如果没有提供ID,我必须显示数据库中的第一个条目以及所有其他条目的链接。
在security.yml中我设置了:
access_control:
- { path: ^/test/, role: ROLE_USER}
我不确定我的问题是在用户设置,路由还是完全不同的东西。 我有什么想法我做错了吗?
编辑: 我的操作的简化版本如下所示:
public function viewAction( $id = null)
{
$item = $this->getDoctrine()
->getRepository("AcmeTestBundle:Item")
->find($id);
return $this->render("AcmeTestBundle:Default:view.html.twig", array("item" => $item));
}
获取数据并将其传递给模板。没什么特别的。
答案 0 :(得分:0)
也许问题是,你没有登录。
您已为角色为ROLE_USER
的用户创建了安全区域。如果您尚未登录,则会导致403错误。
除此之外,您还应声明另一个可通过匿名访问的区域。也许您的登录操作也在防火墙后面,因此您无法访问登录表单。
请查看http://symfony.com/doc/current/book/security.html并阅读"避免常见陷阱"
问候!