2021-04-14

关于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);
        });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值