laravel笔记-中间件

来源:互联网 发布:华中大数据交易所 编辑:程序博客网 时间:2024/05/29 18:22

laravel笔记-中间件

写在前面

时间可贵,善用目录↑

学习Laravel的笔记,仅仅是作为laravel文档笔记,目的是强化对文档的理解,质量不高。


什么是中间件(middleware)

HTTP 中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制。

个人理解中间件相当于控制器的守门人。(控制进出的数据)

用户认证、日志、维护模式、开启Session、从Session中获取错误信息、CSRF验证

php artisan make:middleware CheckAge

中间件用法

如何定义?

中间件CheckAge控制只有age大于200的可以进入控制器

//中间件的命名空间namespace App\Http\Middleware;//匿名函数的类use Closure;class CheckAge{    /**     * 返回请求过滤器     *     * @param \Illuminate\Http\Request $request     * @param \Closure $next     * @return mixed     */    public function handle($request, Closure $next)    {        if ($request->input('age') <= 200) {            //重定向            return redirect('home');        }        //进入控制器        return $next($request);    }}

如何注册?

全局注册:

在app/Http/Kernel.php 的数组属性 $middleware 中添加~

分配到路由:

首先应该在 app/Http/Kernel.php 文件中分配给该中间件一个简写的 key ~

protected $routeMiddleware = [    ......    'checkAge' => App\Http\Middleware\CheckAge::class,];

然后:

Route::get('admin/profile', function () {    //})->middleware('auth', 'checkAge');//可以分配多个中间件,checkAge为我在Kernel.php中注册的CheckAge的key~//或者这样:use App\Http\Middleware\CheckAge;Route::get('admin/profile', function () {    //})->middleware(CheckAge::class);

中间件组:

就是在Kernel.php中设置一个组将多个中间件包含在一起方便分配~
详见Kernel.php中的$middlewareGroups。(分配到路由的方法同中间件)

参数

CheckRole.php

namespace App\Http\Middleware;use Closure;class CheckRole{    /**     * 运行请求过滤器     *     * @param \Illuminate\Http\Request $request     * @param \Closure $next     * @param string $role     * @return mixed     * translator http://laravelacademy.org     */    public function handle($request, Closure $next, $role)    {        if (! $request->user()->hasRole($role)) {            // Redirect...        }        return $next($request);    }}

web.php

Route::put('post/{id}', function ($id) {    //})->middleware('role:editor');

什么时候执行?

参照上面的例子:

//如果返回$next($request)表示请求处理之前return $next($request);//如果操作$next($request)表示请求处理之后$next($request);

可终止的中间件

响应已经发送给浏览器后可终止中间件执行一些任务

不是很清楚是什么意思~

我理解的顺序是:

请求->路由(分配请求)->中间件handle->controller(响应请求)->中间件handle:next(request)->发送响应->terminate

原创粉丝点击