laravel中间件

分类: PHP  • 发布时间: 2015-08-10 22:38:30  • 浏览量:8478

中间件的通俗理解:

路由是一个过程,分析来自客户端的请求按照路由规则分发至相应的处理逻辑。中间件是路由过程的一部分,一个完整的路由过程我们可以简单的理解为:分析url->分发处理->前置操作->对应得处理文件(比如控制器)->后置操作

其中:前置操作和后置操作,可以由中间件来完成,这样我们的控制器就可以专注于逻辑本身,不需要去关注访问者是谁,是管理员还是普通用户,把这些验证操作交给中间件去做。

中间件的创建

要建立一个新的中间件,可以使用 make:middleware 这个 Artisan 命令:

php artisan make:middleware OldMiddleware

这样我们就会在app/Http/Middleware中创建一个OldMiddleware中间件,打开这个文件,在对应的handle方法里可以添加自己的逻辑。

当然,你要是在app/Http/Middleware中手动创建也是可以的,不过要注意命名空间和格式的问题


中间件的注册:

打开app/Http/Kernel.php文件,可以看到这里面有$middleware和$routeMiddleware两个属性,其中$middleware表示全局中间件,所有的路由过程都会使用,如果有些中间件不需要全局使用,只需在需要的路由中指定使用,那么可以注册到$routeMiddleware属性里面。

指派中间件给路由(路由绑定中间件)

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

当我们访问访问http://yourdomain/admin/profile 的时候,首先会经过全局中间件,然后就是我们在 app/Http/Kernel.php 的 $routeMiddleware 数组中定义的名称为 auth 的中间件。


前置(Before)/ 后置(After)中间件


前面在讲路由流程的时候说了前置操作和后置操作,其实都可以理解为中间件操作,那么如果这样理解。前置/后置中间件就很容易理解了,下面我们看看我们前面用make:middleware穿件的OldMiddleware中间件的内容:

<?php
namespace App\Http\Middleware;
use Closure;
class OldMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
            //您的中间件逻辑代码
        return $next($request);
    }
}

这就是一个前置中间件,可以很清晰的看到,这里面就是有一个handle方法,在这个方法里面,我们可以做各种各样的判断等操作,最后这个方法返回return $next($request),这个很重要,他的意思是将请求导向下一个中间件,如果后面已经没有中间件了,就会到的处理逻辑,比如控制器。

那么什么事后置中间件呢?所谓后置中间件就是一个实际处理逻辑运行完以后通过的中间件,他的结构和前置中间件大部分是一样的,比如:

<?php namespace App\Http\Middleware;
class AfterMiddleware implements Middleware {
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        // 您的中间件逻辑代码
        return $response;
    }
}

最主要的区别也就在返回值和您的逻辑代码的位置不一样


我也是新学习laravel,记录的都是我自己的理解,可能有错误,谁发现错误了,给我说一下,我改,别打我就行!

laravel中间件,laravel,中间件,前置中间件,后置中间件,laravel学习,laravel教程
文章标签: php, 教程, laravel, 路由, 中间件