laravel middleware

当你使用larvel创建一个相对比较复杂的web网站时,往往你的routes文件就会变得很庞大。一般来说在开始网站编码之前,最好做一个整体规划,把这些route逻辑上划分为不同的group,每一个group来定一个对应的middleware来控制这些route的访问。比如admin,auth,public等逻辑大块。通常每一个这样的路由集都对应这不同的middleware,比如admin往往需要admin的middleware,必须具备管理员权限的人才允许访问。public则是所有登录用户,甚至无需登录的任何用户都可以访问的routes. 另外,API group可能需要不同的auth middleware, 比如可能需要一个API相关的rate limiter或者其他的东西。

Laravel 5.2引入了一个middleware group的概念,实际上也就是使用一个名称就可以应用一大堆的middleware。

如何创建一个admin的middleware group

我们可以在app/Http/Kernel.php文件中定义middelware group.

Kernel类中定义了一个$middlewareGroups数组属性,我们就在这里来定义新的middlewarep group。看看下面的代码就是laravel自带的middlewaregroup:

protected $middlewareGroups = [
    ‘web‘ => [
        \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,
    ],

    ‘api‘ => [
        ‘throttle:60,1‘,
    ],
];

从上面的例子我们就可以看到,这个数组中的key(web,api)可以引用一个class类,或者一个route-specific middleware shortcut,比如throttle, 或者auth. 甚至web, api也可以被其他的key来引用

现在我们来这么定义:

protected $middlewareGroups = [
    ‘web‘ => [...],
    ‘api‘ => [...],
    ‘admin‘ => [
        ‘web‘,
        ‘auth‘,
    ]
];

通过上面的代码,我们就定义了一个admin middlewaregroup,这个group使用了web(这又是另外一个middleware group),和一个auth(named route middleware).

你可能注意到了在web middlware group中定义的middleware在laravel 5.1中实际上是被应用到了每一个route上的,比如cookie,session,csrf等。但是从5.2开始对于这个做了比较大的改变:任何没有被应用上web这个middleware group的route都将不具备cookie和session或者csrf的功能!

这也给了我们更多的灵活性:比如我们可以创建stateless的API而不用每次都应用那些middleware,也意味着性能的提高.

有必要指出的是:任何依赖于cookie或者session或者csrf的API将不能正常工作,如果他们被放在api 这个middlewaregroup下的话。所以,如果你有一些API是stateful的,那么你需要对默认的api middlewaregroup做一些调整。

使用middlewaregroups

routes.php文件中:

Route::get(‘/‘, function () {
    return view(‘welcome‘);
});

Route::group([‘middleware‘ => [‘web‘]], function () {
    //
});
Route::group([‘middleware‘ => ‘admin‘], function () {
    Route::get(‘dashboard‘, function () {
        return view(‘dashboard‘);
    });
});

在5.2的后期版本,作者做了一下变更,在RouteServiceProvider中默认所有在routes.php文件中定义的route都将被应用了‘web‘这个middlewaregroup!

时间: 2024-10-12 15:54:36

laravel middleware的相关文章

Laravel Middleware 中间件笔记

Laravel的中间件可以方便的过滤进入我们网页的请求.包括用户授权,CORS来指定流出请求的header等. 定义一个新的中间件可以使用命令: php artisan make:middleware AgeMiddleware 这条命令在app/Http/Middleware中创建AgeMiddleware类. 我们假设我们过滤所有年龄小于200的请求: <?php namespace App\Http\Middleware; use Closure; class AgeMiddleware

php.laravel.middleware

关于中间件,在php-laravel中的定义就是对请求的一个过滤,相当于JSP技术中的filter的存在.需要知道编写了一个中间件可以配置在三个地方(就目前5.7版本而言)让其发挥作用,具体需要看/app/Http/Kernal.php文件的定义.在这个文件中的Kernel类中有三个数组,数组上的注释写的已经很清楚了. 下面试着新建一个中间件,因为是测试,所以就针对单挑路由,所以配置到了$routeMiddleware这个数组中,下面记录下大致流程.代码啥的,参考laravel学院的博文. ph

Laravel5.1 中间件-middleware

中间件的主要功能是在达到最终请求动作前对请求进行过滤和处理. 中间件在Laravel中有着广泛的应用,比如用户认证.日志.维护模式.开启Session.从Session中获取错误信息,以及CSRF验证,等等. 中间件的所在目录:\app\Http\Middleware.里面有一些默认的middleware 创建自己的middleware 创建middleware非常简单,我们打开终端,cd到项目目录下执行以下命令即可: php artisan make:middleware TestMiddle

Laravel 开发 API

1. 起因 随着前后端完全分离,PHP 也基本告别了 view 模板嵌套开发,转而专门写资源接口.Laravel 是 PHP 框架中最优雅的框架,国内也越来越多人告别 ThinkPHP 选择了 Laravel.Laravel 框架本身对 API 有支持,但是感觉再工作中还是需要再做一些处理.Lumen 用起来不顺手,有些包不能很好地支持.所以,将 Laravel 框架进行一些配置处理,让其在开发 API 时更得心应手. 当然,你也可以点击这里 , 直接跳到成果- 2. 准备工作 2.1. 环境

手摸手教你让Laravel开发Api更得心应手

https://www.guaosi.com/2019/02/26/laravel-api-initialization-preparation/ 1. 起因 随着前后端完全分离,PHP也基本告别了view模板嵌套开发,转而专门写资源接口.Laravel是PHP框架中最优雅的框架,国内也越来越多人告别ThinkPHP选择了Laravel.Laravel框架本身对API有支持,但是感觉再工作中还是需要再做一些处理.Lumen用起来不顺手,有些包不能很好地支持.所以,将Laravel框架进行一些配置

Laravel 5.0 - Middleware (中间件)

图片:http://stackphp.com/ 如上图所示,中心的绿色区域是整个应用的核心区域. 所以,中间件就是一系列处理请求和响应的方式而不是你用程序逻辑的一部分. Laravel 中默认使用中间件处理请求中的加密解密,以及 Cookies 和 Sessions.你也可以自定义自己所需的中间件. 写中间件 artisan make:middleware MyMiddleware 执行上面的命令,生成中间件文件: <?php namespace App\Http\Middleware; use

laravel中间件 middleware

要创建一个新的中间件,则可以使用 make:middleware 这个 Artisan 命令: 此命令将会在 app/Http/Middleware 目录内设定一个名称为 CheckAge 的类.在这个中间件内我们只允许请求的年龄 age 变量大于 200 时才能访问路由,否则,我们会将用户重定向到首页「home」这个 URI 上. 如你所见,若是 age 小于 200,中间件将会返回 HTTP 重定向给用户端,否则,请求将会进一步传递到应用程序.只需调用带有$request的$next方法,即

在Laravel中使用Middleware进行身份验证

新建一个中间件: 方法写在handle中 判断用户是否登录而且是否是管理员,不是的话返回到主页 新建判断是否为管理员的方法 在kernel定义一个中间件,key是admin 注册群组路由:prefix是路由前缀,访问路由会自动在前面加上路由前缀:middleware是key值,会去验证中间件 1在数据库中是管理员 成功 附: 注册单个路由的中间件: Route::get('admin/profile', ['middleware' => 'auth', function () { // }]);

How Use PHPUnit Test in Laravel 5.1

Access all tutorials in sprocket icon. June 12, 2015 from author Bill Keck. Sometimes for beginners, the idea of PHPUnit testing code can be scary. You find yourself having to install the test framework, learn a whole new series of commands and metho