laravel5.5中间件
1. 中间件知识
1. artisan 命令
php artisan make:middleware CheckAge
2. 文件内容
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 200) {
return redirect('home');
}
//还可以进行一些其他的判定
return $next($request);
}
}
3. 前置中间件和后置中间件
前置中间件和后置中间件区别在于执行动作在$next($request)之前还是之后
//前置中间件
public function handle($request, Closure $next)
{
// 执行动作,在$next($request)之前
$response = $next($request);
return $response;
}
//后置中间件
public function handle($request, Closure $next)
{
$response = $next($request);
// 执行动作在$next($request)之后,return之前
return $response;
}
4. 使用中间件
- 全局中间件
只需在 app/Http/Kernel.php 类中的 $middleware 属性里列出这个中间件类 。
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
//更多。。。
];
- 特定路由中间件
只需在 app/Http/Kernel.php 类中的 $routeMiddleware 属性里添加,然后在路由中分配给路由
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
//更多。。。
];
//给路由分配中间件
Route::get('admin/profile', function () {
//
})->middleware('auth');
//分配多个中间件:
Route::get('/', function () {
//
})->middleware('first', 'second');
- 中间件组
只需在 app/Http/Kernel.php 类中的 $middlewareGroups 属性里添加,然后在路由中分配给路由
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,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'auth:api',
],
];
//一次为路由分配多个中间件
Route::get('/', function () {
//
})->middleware('web');
Route::group(['middleware' => ['web']], function () {
//
});
2. 控制器中间件
中间件 可以在路由文件中被分配给控制器路由:
Route::get('profile', 'UserController@show')->middleware('auth');
但是,在控制器的构造方法中指定中间件会更方便。使用控制器构造函数中的 middleware 方法,你可以很容易地将中间件分配给控制器的行为。你甚至可以约束中间件只对控制器类中的某些特定方法生效:
class UserController extends Controller
{
/**
* 实例化一个新的控制器实例。
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('log')->only('index');
$this->middleware('subscribed')->except('store');
}
}
还能使用闭包来为控制器注册中间件。闭包的方便之处在于,你无需特地创建一个中间件类来为某一个特殊的控制器注册中间件:
$this->middleware(function ($request, $next) {
// ...
return $next($request);
});
laravel5.5中间件的更多相关文章
- laravel5.8笔记四:中间件
应用场景:检测登陆,控制器加载数据,传递常量 命令 //中间件创建命令 php artisan make:middleware Check 注意: 1.需要注册中间件 2.中间件命名不能重复 mi ...
- 【laravel5.6】 laravel中间件内生成参数并且传递到控制器的2种方法
中间件方法: /** * 自定义中间件: * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return ...
- 【laravel5.4】Baum无限极分类和collect助手函数、transform()中间件(转换数据)方法使用
1.目的,无限极分类 /* * getdepartment:获取[当前登录用户对应公司的所有有效部门] * DB::table ==>返回查询构造器结果,不会返回一个collect实例 * 而 ...
- laravel5.5源码笔记(六、中间件)
laravel中的中间件作为一个请求与响应的过滤器,主要分为两个功能. 1.在请求到达控制器层之前进行拦截与过滤,只有通过验证的请求才能到达controller层 2.或者是在controller中运 ...
- Laravel5.1 Middleware中间件(初级)
中间件?什么鬼? 大家第一次接触这个词都会有这么个疑问,但它其实没那么神秘. 一句话就可以解释它:过滤HTTP请求专用机制. 为什么要使用中间件? 过滤HTTP请求是可以写在别的地方,比如说控制器中 ...
- Laravel5.1学习笔记3 HTTP中间件
HTTP 中间件 简介 建立中间件 注册中间件 可终止中间件 简介 HTTP 中间件提供一个方便的机制来过滤进入应用程序的 HTTP 请求,例如,Laravel 默认包含了一个中间件来检验用户身份验证 ...
- Laravel5.3使用学习笔记---中间件
Laravel提供了中间件的使用.那什么是中间件呢,根据用法,我总结为,夹在“请求—>控制器—>响应—>end”中间运行的代码片段.本文将以官方英文文本为基础资料进行笔记记录. La ...
- Laravel5.0学习--02 实例进阶
本文以laravel5.0.22为例. 本节以新建一个简单的博客作为实例. 准备工作 数据库配置 .env文件(也可以直接修改config/database.php) DB_HOST=localhos ...
- Laravel5.0学习--01 入门
本文以laravel5.0.22为例. 生产环境建议使用laravel5.1版本,因为该版本是长期支持版本.5.1文档更详细:http://laravel-china.org/docs/5.1. 环境 ...
随机推荐
- Altium_Designer-各种布线总结
1.常规布线:不详细说了,是个人就知道怎么弄.需要说明的是在布线过程中,可按小键盘的*键或大键盘的数字2键添加一个过孔:按L键可以切换布线层:按数字3可设定最小线宽.典型线宽.最大线宽的值进行切换. ...
- UVA 12345 Dynamic len(set(a[LR]))
题意:询问区间唯一元素个数,单点修改. 分析: 借助Unique snowflakes, Can you answer these queries II的思想,唯一性可以借助元素上一次出现的位置来判断 ...
- linux 内存地址空间管理 mm_struct
http://blog.csdn.net/yusiguyuan/article/details/39520933 Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起 ...
- 轻量级HTTP服务器Nginx(Nginx性能优化技巧)
轻量级HTTP服务器Nginx(Nginx性能优化技巧) 文章来源于南非蚂蚁 一.编译安装过程优化 1.减小Nginx编译后的文件大小在编译Nginx时,默认以debug模式进行,而在debu ...
- ios RSA 验签加密解密
关于公钥和私钥的生成,网上有很多本地生产的方法,我遇到的问题是,按照网上生产的方式生成7个文件,本地使用没有问题,但是和后台交互就不行了. 发现生成公钥和私钥的没有那么麻烦,使用在线生产工具就能使用, ...
- 使用taobao cnpm 源解决npm无法安装module问题
npm 安装nativescript时出现异常,一直停着不动.应该是源被墙了的问题可以使用淘宝仓库,执行下面的命令: alias cnpm="npm --registry=https://r ...
- 解决Gearman 报sqlite3错误
删除了系统原带的sqlite3 ,到官网上下一个源码,重新编译安装sqlite3. 如:把sqlite3安装到 /usr/local/sqlite3tar zxf sqlite3.xxxx.tar.g ...
- python3中使用HTMLTestRunner.py报ImportError: No module named 'StringIO'的解决办法
.原因是官网的是python2语法写的,看官手动把官网的HTMLTestRunner.py改成python3的语法: 参考:http://bbs.chinaunix.net/thread-415474 ...
- BZOJ1854: [Scoi2010]游戏(二分图匹配)
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
- percona-zabbix-templates插件安装监控MySQL
前期准备:被监控机已经安装好php 1.在zabbix客户端安装mysql监控插件rpm包 rpm -ivh https://www.percona.com/downloads/percona-mon ...