在了解一些基础的laravel知识后,可以试着去了解laravel一些功能强大并且特有的知识点,比如中间件,那么官方给它的定义是:HTTP 中间件为过滤访问你的应用的 HTTP 请求提供了一个方便的机制。例如,Laravel 默认包含了一个验证用户的中间件。如果没有经过身份验证,中间件将会将用户重定向至登录页面。然而,如果用户经过了验证,中间件将会允许请求继续在应用中执行下去。个人理解是,中间件就是放到方法前和方法后去执行,然后影响执行的效果.
那么laravel中的中间件事定义在哪里呢?
app\http\Middleware
我们定义的中间件是在这个目录下,那么中间件除了有影响方法的效果,还有什么样的机制呢??
定义中间件
既然使用中间件,就必须去定义,那么怎么去定义呢?
之前了解过artisan工具,那么它是否可以帮助我们呢?
php artisan make:middleware EmailMiddleware
这样的一条命令即可,执行之后会在定义的目录下多出一个EmailMiddleware
的中间件
<?php
namespace App\Http\Middleware;
use Closure;
class Emailmiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
以上的php文件就是中间件的内容,只有一个方法,handle
里面的两个参数,一个是request对象,那么在laravel中是一个请求的意思,同样的还有一个$next方法,直接return,个人理解就是用next方法去处理在路由中的请求信息
可能大家会有疑问,中间件就这么点东西么?不是的
现在只是定义了中间件,如何去使用呢?
注册中间件
最简单的方法是在路由中或控制器中去使用
- 注册中间件到路由
//app/routes.php
Route::get('test',['middleware'=>'App\Http\Middleware\EmailMiddleware',function(){
echo 'hello';
}])
//app\http\Middleware\EmailMiddleware
public function handle($request, Closure $next)
{
$rs = $next($request);
echo 'world';
return $rs;
}
运行test这个action
给response
的是
hello world
但是在路由中请求信息是hello
,为什么给返回的是hello world
呢,这就是中间件起到的作用,我们在请求信息之后,执行了一个 echo world
的响应信息,这是中间件的简单应用
刚才呢,是把中间件注册到基础路由上,如果注册到控制器路由呢,应该怎么样去使用
- 注册中间件到控制器路由
Route::get('index',['middleware'=>'App\Http\Middleware
\EmailMiddleware','uses'=>'IndexController']);
把中间注册到控制器路由上,与基础路由有一定的区别,
![](https://img.haomeiwen.com/i3776053/44ee186f8b33c479.png)
这些呢是一些非常简单的中间件使用,直接在路由中去注册然后使用
去laravel做过项目的同学可能都知道,每当去post的提交的时候,就会报一个Token的错误,那这个错误,为什么每次去post的提交都会报错呢,仔细去看,在app\http\middleware
下有个VerifyCsrfToken.php
这样的中间件,然后laravel官方呢把这个中间件给注册到全局上,就是app\Kernel.php
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,//token的验证
];
//在路由中声明的中间件
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];
每当我们去提交的时候就会报token的错误
所以呢,我们也可以把中间件给注册到Kerner.php中,如
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'Email' => \App\Http\Middleware\EmailMiddleware::class,//新声明的中间件
];
在路由中调用这样就可以了,如
Route::get('test',['middleware'=>'Email',function(){
echo 'hello';
}]);
这些呢就是中间件的使用,欢迎学习!!!
网友评论