关于laravel中间件和构造方法的执行顺序
IndexController控制器
class IndexController extends Controller
{
public function __construct()
{
echo "构造方法<br/>";
}
public function index(){
echo "index方法 <br/>";
}
}
UserAuth中间件
class UserAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
echo "中间件<br/>";
return $next($request);
}
}
/**
* 路由如下
**/
Route::get("/","App\Http\Controllers\index\IndexController@index")->middleware("user.auth");
/* 在Kernel中注册中间件 */
'user.auth'=>\App\Http\Middleware\UserAuth::class
运行效果如下,执行顺序为:构造器 > 中间件 > 方法
但有的时候我们需要在中间件中进行验证,并将验证的数据在构造方法中使用,那应该怎么办呢?
UserAuth中间件
class UserAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$request->offsetSet("name","测试");
return $next($request);
}
}
IndexController控制器
class IndexController extends Controller
{
private $name;
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->name = $request->name;
return $next($request);
});
}
public function index(){
echo $this->name;
}
}
运行结果如下
可以通过在构造器中使用闭包来获取request对象中自定义参数进行使用,当然也可以使用Auth::user()方法获取用户信息
class ProjectController extends Controller
{
/**
* All of the current user's projects.
*/
protected $projects;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->projects = Auth::user()->projects;
return $next($request);
});
}
}