【发布时间】:2017-03-30 01:16:36
【问题描述】:
我想为我在 Symfony 中的所有控制器创建一个基本控制器类,我对 Symfony 很陌生,所以不要对愚蠢的问题生气。我问这个问题是因为我不能做这样的事情
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class AbstractController extends Controller
{
public function __construct()
{
//...... check access level
$user = $this->getUser(); //This is not working, I don't have access to the Controller(the base class) properties
}
}
现在是我的控制器之一
class UserController extends AbstractController
{
public deleteUserAction(Request $request)
{
var_dump($this);// this will dump an empty class that is not instance of Symfony\Bundle\FrameworkBundle\Controller\Controller
//.... delete user
}
}
最好的方法是什么?请...
编辑....
我真正想做的是检查用户权限级别是否足以访问特定控制器(例如 UserController)中的特定操作(例如 deleteUserAction()),我有一个类将权限级别附加到所有控制器中的所有操作.如果检查发生在父控制器(例如 BaseController 的构造函数)中,它在 UserController->deleteUserAction() 之前执行但在基本控制器中我无权访问 $this,则检查将非常有效。
我已经尝试过选民和 ACL,但对我的情况没有帮助。
提前致谢。
【问题讨论】:
-
您所做的继承方式很好,尽管您可能希望将
AbstractController实际上设为abstract。$this instanceof AbstractcontrollerinUserController应该返回 true(考虑到您没有使用不同的命名空间或正确处理它们)。 -
您不能在 Controller::__construct() 中做任何事情,因为尚未设置容器。就是行不通。您可以做的是创建一个控制器侦听器类,该类将在控制器完全构造后和调用控制器操作之前调用。这是一个有点高级的话题。可能只想检查操作中的权限以开始。 symfony.com/doc/current/event_dispatcher.html
标签: php symfony controller abstract-base-class