Laravel 中,控制中间件 的文件 app\Http\Kernel.php
分别有以下变量
$middleware 负责全局的中间件,每一个由Laravel 启动的url 都会经过此中间件
最近查看旧项目的时候,发现在$middleware 中添加了 \Illuminate\Session\Middleware\StartSession::class 有个小问题。session 用put() 保存的时候会有长度限制,超出长度就会停止再继续保存,如果只是记录登录的用户信息,这个倒影响不大,如果用来写购物车就出问题了,购物车的session 会不断变大最终导致无法保存完整!
$middleware 移除StartSession 后,会导致__construct() 中无法读取session,查过相关文章,大概说,__construct() 比 $middleware更加早执行,所以在__construct()中无法读取session 的原因。可能可以再自定义的中间件中读取,具体还没测试过!
$middlewareGroups 针对路由的中间件,里面有web 和api 的变量,分别对应 路由中web 和api 的文件
$routeMiddleware 自定义一个中间件的名称及路径,可以单独配置到一个 Controller 或者url 上。
例如:在路由中,将中间件配置到/index 的路径上
Route::get('/index', 'TestController@index')->middleware('test3');
也可以将中间件配置到Controller 上,如:
public function __construct(){
$this->middleware('test3');
}
$this->middleware() 测试了一下,只能放在构造函数__construct() 中,如果写在其他function 里面,就无法工作
测试 $middleware $middlewareGroups $routeMiddleware $middlewarePriority 优先级
$middleware > $middlewareGroups > $routeMiddleware
$middlewarePriority 是一个优先级的设置,负责设置 $middlewareGroups 的优先级
举例:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\Test1Middleware::class,
\App\Http\Middleware\Test2Middleware::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
我在web 中,新增了Test1Middleware 和 Test2Middleware ,执行的顺序,应该是先Test1,然后再到Test2 的
如果我在$middlewarePriority 中修改一下,如下:
protected $middlewarePriority = [
\App\Http\Middleware\Test2Middleware::class,
\App\Http\Middleware\Test1Middleware::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\Authenticate::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Illuminate\Auth\Middleware\Authorize::class
];
Test2 摆在第一位,Test1在第二位,在执行的时候,系统就会先执行Test2的
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97994.html