我想检查一下,在调用操作之前,用户是否已登录。
像preDispatch()
代替SymfonyBundleFrameworkBundleControllerController
这样的东西会很棒。
我想避免这个:
class MyBaseController extends Controller {
public function __construct() {
// ...
// check: logged in?
// ...
}
}
class MyFooController extends MyBaseController() {
// ...
}
我刚刚找到了2011/2012年的主题。我是Symfony的新手,使用的是2.5版本,我想从一开始就知道最佳实践。有什么建议吗?
提前感谢!
编辑:
有趣的是:http://symfony.com/doc/current/cookbook/event_dispatcher/before_after_filters.html
1/您可以使用kernel.controller
事件在过滤器之前(以及之后)进行设置。下面是文档中的一个很好的例子。
- 使用kernel.controller事件进行筛选之前
2/您还可以创建一个侦听kernel.request
事件的事件侦听器,并在针对任何控制器之前检查用户是否已通过身份验证。
这是HttpKernel调度的第一个事件,主要用于向请求添加信息或在需要时返回早期响应(例如,拒绝未经身份验证的用户或无权访问任何给定资源的用户的访问)。
您还可以在kernel.controller
事件上创建一个侦听器(如我前面列出的文档中的示例所述)。此事件是在HttpKernel确定控制器可调用后发出的。它主要用于在控制器执行之前初始化,也用于更改控制器以执行
您必须阅读HttpKernel组件文档,才能全面了解Symfony在内部的行为。
3/您也可以使用@Security注释来限制对控制器、的访问
use SensioBundleFrameworkExtraBundleConfigurationSecurity;
class MyFooController extends Controller
{
/**
* @Security("has_role('ROLE_USER')")
*/
public function anyAction()
{
// ...