您的位置:首页 > 编程语言 > PHP开发

[李景山php]每天laravel[025]-laravel 基础知识 --- 中间件

2017-04-01 13:14 567 查看
中间件:感觉就是一个类似于 守卫/保镖 的方式,随时监控正常服务之外的处理。

我们可以把很多通用的需要做成中间件:

比如: 登录权限检测、日志记录、头信息修改 等等。。。

第一个: 创建中间件 控制器类

php artisan make:middleware 名字+Middleware


这个命令会在 app/Http/Middleware 文件夹中产生一个新的 名字+Middleware 的类。

这里的关键函数是:

public function handle($request, Closure $next)
{
// 进行逻辑处理
return $next($request);
}


在当前【进行逻辑处理】的位置后,加上自己需要的逻辑,即可!

这里有两个特殊的说明:

就是 前置 / 后置 中间件。定义方案两个特殊名字的中间件:

BeforeMiddleware 跟我们的 AfterMiddleware

这样就是特殊的 中间件。

第二: 注册中间件

2.1 全局中间件

把想要注册的全局中间件,放置到

app/Http/Kernel.php 类的 $middleware 属性列表中

例如:默认的。

protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
];


2.2 局部中间件【指派中间件给路由】
2.2.1  首先需要把中间件 加入到 路由中间件里面,就是 app\Http\Kernel.php 里面的 $routeMiddleware ,这样 再路由中添加中间件的时候,才能使用。

例如:


protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];


2.2.2 在路由中标明 使用的中间件。


方式1 :

Route::get('admin/profile', ['middleware' => 'auth', function () {
//
}]);


方式2:

Route::get('/', function () {
//
}])->middleware(['first', 'second']);


第三:设置中间件参数

中间件也是可以接收参数的,这个还是很牛叉的。

用法:就是在 默认的 Closure next,之后填写新的参数,例如role

public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
// Redirect...
}

return $next($request);
}


中间件参数中,使用 参数的话,可以用 : 隔空指定。


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


第四:可以终止中间件

用途:例如 session 中间件,需要发送用户之后保存 session 数据。
需要的函数是:


public function terminate($request, $response)
{
// Store the session data...
}


terminate 方法会收到 request 和 响应 response 。

定义了可以终止的中间件,需要添加这个 HTTP kernel 的全局中间件列表中去。

singleton 来注册中间件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 中间件
相关文章推荐