[李景山php]每天laravel[025]-laravel 基础知识 --- 中间件
2017-04-01 13:14
567 查看
中间件:感觉就是一个类似于 守卫/保镖 的方式,随时监控正常服务之外的处理。
我们可以把很多通用的需要做成中间件:
比如: 登录权限检测、日志记录、头信息修改 等等。。。
第一个: 创建中间件 控制器类
这个命令会在 app/Http/Middleware 文件夹中产生一个新的 名字+Middleware 的类。
这里的关键函数是:
在当前【进行逻辑处理】的位置后,加上自己需要的逻辑,即可!
这里有两个特殊的说明:
就是 前置 / 后置 中间件。定义方案两个特殊名字的中间件:
BeforeMiddleware 跟我们的 AfterMiddleware
这样就是特殊的 中间件。
第二: 注册中间件
2.1 全局中间件
把想要注册的全局中间件,放置到
app/Http/Kernel.php 类的 $middleware 属性列表中
例如:默认的。
方式1 :
方式2:
第三:设置中间件参数
中间件也是可以接收参数的,这个还是很牛叉的。
用法:就是在 默认的 Closure next,之后填写新的参数,例如role
第四:可以终止中间件
terminate 方法会收到 request 和 响应 response 。
定义了可以终止的中间件,需要添加这个 HTTP kernel 的全局中间件列表中去。
singleton 来注册中间件。
我们可以把很多通用的需要做成中间件:
比如: 登录权限检测、日志记录、头信息修改 等等。。。
第一个: 创建中间件 控制器类
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]每天laravel[025]-laravel 基础知识 --- 控制器
- [李景山php]每天laravel[024]-laravel 基础知识 --- 路由
- [李景山php]每天laravel[028]-laravel 基础知识 --- 响应
- [李景山php]每天laravel[035]-laravel 基础知识 --- Eloquent 模型之关系映射
- [李景山php]每天laravel[029]-laravel 基础知识 --- 视图
- [李景山php]每天laravel[033]-laravel 基础知识 --- 数据库
- [李景山php]每天laravel[030]-laravel 基础知识 --- blade模版
- [李景山php]每天laravel[031]-laravel 基础知识 --- 服务容器
- [李景山php]每天laravel[034]-laravel 基础知识 --- 数据迁移及填充
- [李景山php]每天laravel[032]-laravel 基础知识 --- Contract 及 Facade
- [李景山php]每天laravel[027]-laravel 基础知识 --- 请求
- [李景山php]每天laravel[019]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---路由
- [李景山php]每天laravel[023]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---主页,亲爱的,我回来了!!
- [李景山php]每天laravel[023]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---在主页上添加数据
- [李景山php]每天laravel[018]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---准备关系模型
- [李景山php]每天laravel[021]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---Task 任务处理控制器
- [李景山php]每天laravel[022]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---Task 任务处理控制器--显示主页
- [李景山php]每天laravel[023]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---删除数据
- [李景山php]每天laravel[023]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---登录,该死的登录
- [李景山php]每天laravel[017]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---准备数据库