laravel笔记-中间件

27 篇文章 0 订阅
17 篇文章 0 订阅

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值