shadowfax icon indicating copy to clipboard operation
shadowfax copied to clipboard

Controller的构造函数里面使用中间件异常

Open shark2202 opened this issue 4 years ago • 1 comments

BaseController.php

class BaseAgentController extends Controller
{
    /**
     * @var $user Collection
     */
    protected $user;

    public function __construct()
    {
        //执行中间件获取用户信息
        $this->middleware(function ($request, $next) {
            $this->user = collect(Auth::user())->except(['permissions', 'roles']);
            return $next($request);
        });
    }

}

IndexController.php

class IndexController extends BaseAgentController
{

    public function index(Request $request)
    {
        $user = $this->user;//这个地方有时能够获取到数据,有的时候不能获取到数据,获取到的是NULL

        return view('admin.index.index', compact('user'));
    }
}

如上在父类的CONTROLLER中的构造函数使用中间件方法给对象属性设置值,在子类的CONTROLLER中有的时候获取不到设置的属性值

shark2202 avatar Nov 10 '20 11:11 shark2202

这种方式只能在fpm模式下玩起来, 常驻内存的模式必须把当前控制器销毁。 建议在具体的中间件文件handle中把参数设置到本次请求的request中,这样就能全局使用了,或者使用trait去获取.

dafa168 avatar Feb 14 '22 01:02 dafa168