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

laravel系列5-- 中间件

2015-12-29 10:59 656 查看

引言

中间件使得过滤请求变得更加方便,例如在laravel中有认证中间件可以帮助判断用户认证情况,所有的中间件都在
app/Http/Middleware
文件夹下。

定义中间件

生成新的中间件使用
Artisan
指令完成,代码如下

php artisan make:middleware OldMiddleware


该指令在
app/Http/Middleware
文件夹生成一个新的
OldMiddleware
类,该类实现了当
age>200
时,允许路由通过,否则重定向到
home
。代码如下

<?php namespace App\Http\Middleware;

use Closure;

class OldMiddleware {

/**
* Run the request filter.
*
* @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);
}

}


可以将中间件视作是过滤请求的层,只有满足要求的请求才能通过。

中间件执行顺序

一个中间件是在请求之前执行还是在请求之后执行取决于中间件自身。下面的中间件将会在请求之前进行处理。

<?php namespace App\Http\Middleware;

use Closure;

class BeforeMiddleware implements Middleware {

public function handle($request, Closure $next)
{
// Perform action

return $next($request);
}
}


下面的代码将会在请求之后处理

<?php namespace App\Http\Middleware;

use Closure;

class AfterMiddleware implements Middleware {

public function handle($request, Closure $next)
{
$response = $next($request);

// Perform action

return $response;
}
}


注册中间件

全局中间件

只需要在
app/Http/Kernel.php
中的
$middleware
中写入中间件类的名字即可。

匹配中间件和路由

首先需要在
app/Http/Kernel.php
为中间件起一个名字,通常
$routeMiddleware
属性定义了所有的内置中间件,只需在最后添加自己的中间件类即可,并且给定一个名称。之后可以在路由中使用已经定义的名字,示例代码如下

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


最后处理的中间件

有时中间件需要在请求完成之后进行,例如日志中间件和ssesion中间件,这时需要定义为
terminable
中间件,代码如下

use Closure;
use Illuminate\Contracts\Routing\TerminableMiddleware;

class StartSession implements TerminableMiddleware {

public function handle($request, Closure $next)
{
return $next($request);
}

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: