Laravel5.3 中间件和控制器构造方法执行顺序问题
我在项目中创建了一个判断移动端还是PC端的中间件,然后发现中间件在控制器构造方法执行完后才调用了,然后重新建了个项目试了下。
class WebInit
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
dump('a');
return $next($request);
}
}
然后控制器里
class MainController extends Controller
{
public function __construct()
{
dump('b');
}
public function index(){
dump('c');
}
}
最后访问一下本地

然后找了一下5.3的变更文档发现

想问一下laravel5.3以后这么处理的原因是什么,感觉这样想获取数据要每个方法都要从request里获取值挺麻烦的
关于 LearnKu
我也遇到同样的问题。不知道有没有解决方案,本打算在中间层里从容器里拿到已经实例化好的controller对象,但也找不到路子。
为什么要这么做啊!控制器的构造早于中间件,那中间件的过滤作用不就没用了吗
@Complicated 不啊,构造方法是在实例化的时候执行的,而request请求的是实例化后的其他方法,这不冲突啊,只是方便了在一个类中统一使用一个中间件,说到底是更方便了啊
@AbleYu 没提明白你说的意思(捂脸),,我就是想说,,有些时候吧,需要在构造函数里获取session,然后查询数据库,但是在中间件判断sesssion有没有值,没有值直接到登录界面!但是如果controller的构造函数早于中间件,那这样不就不行了
@Complicated 在构造函数调用中间件
@AbleYu 你的意思是在 构造函数里定义中中间件还是在构造函数里绑定中间件?