前言:Laravel文档梳理,仅作为记录后看,无关其他。

1、什么是中间件?
见字识意,放在中间部分,用来处理某种业务的组件。http中间件,提供了一个方便的机制过滤进入应用程序的http请求,只有经过了中间件的过滤,程序才会继续往下运行。

2、常见的中间件功能
Auth中间件,验证用户的身份
Cors中间件,负责替所有即将离开程序的响应,加入适当的标头
日志中间件,负责记录所有传入应用程序的请求。

3、laravel框架的中间件放在哪里?
App/Http/Middleware

4、如何创建出一个中间件?
php artisan make:middleware OldMiddleware

Ps:可手动创建,也可以通过artisan命令来生成。
此命令将会在 app/Http/Middleware 目录内设定一个名称为 OldMiddleware 的类

5、OldMiddleware中间件实例
<?php

namespace App\Http\Middleware;

use Closure;

class OldMiddleware
{
    /**
     * 运行请求过滤器。
     *
     * @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);
    }

}
Age小于200,中间件将返回http请求重定位到用户端,否则,进步传入应用程序。

6、如果你希望http请求,都经过你的中间件,那该怎么处理?
将中间件加入到app/Http/kernel.php文件的$middleware属性中。

7、如果你想单独给某个路由指定中间件,如何处理?
a、在app/Http/Kernel.php文件的$routeMiddleware属性中加一组自定义的该中间件的键值,如下:
// 在 App\Http\Kernel 类内...

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];

b、在路由文件中,针对路由使用添加好的中间件的键名,即可。
中间件,一旦在kernel文件中指定,就可以在路由选项中,使用middleware键值指定:
Route::get('admin/profile', ['middleware' => 'auth', function () {
    //
}]);

c、也可以给一个路由使用多个中间件,如下:
Route::get('/', ['middleware' => ['first', 'second'], function () {
    //
}]);

d、除了c这种方法,也可以链式调用middleware方法
Route::get('/', function () {
    //
}])->middleware(['first', 'second']);

8、中间件参数
运行某操作前,要验证当前用户是否有该【角色】,你可以创建一个角色中间件,接收角色名称,作为额外传参:
<?php

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware
{
    /**
     * 运行请求过滤
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $role
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if (! $request->user()->hasRole($role)) {
            // 如果用户没有特定「角色」的话
        }

return $next($request);
    }

}
在路由中,可使用冒号:来间隔中间件名称与指派参数,多个参数可以使用逗号分隔
Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
    //
}]);

9、Terminable中间件
这个中间件,是为了满足http请求发送到浏览器之后,才处理session存储操作的。
<?php

namespace Illuminate\Session\Middleware;

use Closure;

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

public function terminate($request, $response)
    {
        // 保存 session 数据...
    }
}

一旦定义了中间件,你就需要把它加到kernel文件的全局中间件清单列表中。

当你调用terminate()方法时,laravel会从服务器容器解析出一个全新的中间件实例。

如果你希望handle() terminate()方法被调用时使用一致的中间件,那么,就需要使用容器的singleton方法注册中间件。

Laravel文档梳理8、中间件相关推荐

  1. Laravel文档梳理6、响应

    前言:Laravel文档梳理,仅作为记录后看,无关其他. 1.laravel框架最基本的响应 Route::get('/', function () {     return 'Hello World ...

  2. B2G OS官网文档梳理

    前提: B2G OS官方文档地址:https://developer.mozilla.org/en-US/docs/Archive/B2G_OS 在网上查阅关于FireFox OS相关的文章.博客,发 ...

  3. 服务器文档梳理,工作内容:配置文件服务器并整理文档

    <工作内容:配置文件服务器并整理文档>由会员分享,可在线阅读,更多相关<工作内容:配置文件服务器并整理文档(8页珍藏版)>请在人人文库网上搜索. 1.工作内容:配置文件服务器, ...

  4. 数据产品经理踩坑之——数据无法上卷进行汇总需求文档梳理

    背景:前日在出数据需求文档时,错将不可上卷汇总的需求提成了最细粒度化的需求,导致数据无法上卷,因此无法展现的事情,现将此情况进行review,以帮助自己的成长. review:有些数据是无法用最细粒度 ...

  5. 服务器文档梳理,服务器节点与集群

    服务器节点与集群 内容精选 换一换 节点是容器集群组成的基本元素.节点取决于业务,既可以是虚拟机,也可以是物理机.每个节点都包含运行Pod所需要的基本组件,包括Kubelet.Kube-proxy . ...

  6. 不写技术文档是个什么梗

    写文档在工作中很常见了,正规的公司都有文档,除非是很简单的东西. 文档用来给新人或不熟悉的人的看,出需求也要文档.只凭笔在本子上划几下不能让人懂. 凡是稍微复杂的东西一定用文档梳理流程,有的还有流程图 ...

  7. 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制...

    Swashbuckle.AspNetCore3.0 介绍 一个使用 ASP.NET Core 构建的 API 的 Swagger 工具.直接从您的路由,控制器和模型生成漂亮的 API 文档,包括用于探 ...

  8. MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结

    MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结 1.MFC单文档程序运行流程 1.首先利用全局变量对象 theApp 启动应用程序 (这是因为这个全局对象,基类CWinApp中 this ...

  9. 产品需求文档写作方法(一)写前准备+梳理需求

    一.写前准备 1.1我们先明白几个名词: MRD 市场需求文档,(英文全称Market Requirement Document,MRD).该文档在产品项目过程中属于"过程性"文档 ...

  10. [ Laravel 5.5 文档 ] 快速入门 —— 使用 Laragon 在 Windows 中搭建 Laravel 开发环境

    简介 之前学院君陆续写了三篇介绍 Laravel 开发环境的教程:Homestead.Valet 和 LaraDock,我都是在 Mac 系统中安装使用的,相当流畅,没有任何梗,但是对于那些使用 Wi ...

最新文章

  1. pandas中的基本功能
  2. ios 圆形旋转菜单_iOS高级动画:圆形树展开收起动画
  3. Java 计算学生的平均成绩
  4. 关中断解决任务间资源共享问题
  5. rlm sql mysql.so_UBUUTU7.10上安装配置freeradius+mysql+rp-pppoe手记
  6. 考公专业科目计算机,2017国考中国证监会专业科目考试大纲(计算机类)
  7. 5-数据结构-数组的学习
  8. java.sql.SQLException: ORA-28001: 口令已经失效
  9. ARM公司推出AI与机器学习用新型微处理器
  10. Linux 下子线程 exit code 在主线程中的使用
  11. 拉格朗日方程的三种推导方法之基于达朗贝尔原理推导
  12. 短视频App开发方案IOS架构
  13. 如何用木板做桥_用木板做桥 工具跟做家具的一样 大小跟办公桌差不多大 能承重 参加比赛 主要是承重 给个设计方案...
  14. 货币金融学之基本概念
  15. 手机 app GDPR 合规的9个关键步骤
  16. Python爬虫及其它函数知识读记及简单用法,持续更新中...
  17. 两个显示屏之间鼠标移动方向调整
  18. 前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs)
  19. Visual Studio 2022有趣又强大的智能辅助编码
  20. 强化学习经典算法笔记(十九):无监督策略学习算法Diversity Is All You Need

热门文章

  1. 1一9数字行书写法_阿拉伯数字怎么写好看(数字1到10的漂亮手写体)
  2. Android网络框架情景分析之NetworkManagementService和Netd交互深入分析一
  3. 学中式烹调10天笔记(正式)
  4. ExtJS 可视化开发工具大全
  5. 云痕大数据 家长登录_云痕大数据查成绩app
  6. [leetcode题解] 第995题Minimum Number of K Consecutive Bit Flips
  7. 微信平台商户开通证书相关问题盘点
  8. 小波 奇异点 matlab,用Matlab小波变换检测奇异点.doc
  9. 多测师肖sir_金牌高级讲师_po设计(000)
  10. 如何解决360的导航一直绑定为首页(亲测有效)