感觉控制器的前置初始化还是放在框架层面比较好

ichynul

见我之前发过的pr: https://github.com/walkor/webman-framework/pull/39/files
调用控制器的action前,检测控制器是否存在约定名称的初始化方法。
靠中间件去处理,有中间件执行顺序的问题。
比如使用action-hook处理。


protected $admin;

public function beforeAction(Request $request)
{
    $this->admin = session('admin_user');
    if (!in_array($this->admin['role_id'], [1, 2])) {
       //特殊角色处理
    }
}

我另外使用了一个中间件处理权限验证,正常情况来讲,如果action-hook中间件在我中间件后面的话,
$this->admin = session('admin_user');这句是可以拿到当前管理员用户的。
但如果action-hook在我权限验证中间件之前执行了,用户未登录时这里直接就报错了。
如果我在这里加上if(!$this->admin){}判断,那我另外的中间件就是多余的了,直接把权限验证放在beforeAction里面做。
而且还会陷入一个怪圈,就是那种写个baseController,然后其的所有控制器去继承它。
另外,别告诉我修改config/middleware.php调整中间件顺序之类的。我写个插件做的权限验证。

177 1 0
1个回答

walkor

等 1.4,1.4版本支持不复用控制器,到时候就可以在每个请求前执行控制器的__construct

  • 暂无评论
🔝