laravel_基础_中间件
来源:互联网 发布:婚礼入场音乐知乎 编辑:程序博客网 时间:2024/05/01 10:38
1.生成一个中间件
生成一个test中间件
php artisan make:middleware TestMiddleware
中间件类默认存放在app/Http/Middleware目录下。
中间件一般分before和after两种
before:
主要用于前置判断,比如用户登录验证、CSRF认证等
<?phpnamespace App\Http\Middleware;use Closure;class BeforeMiddleware{ public function handle($request, Closure $next) { // 执行业务逻辑操作 return $next($request); }}
after:
主要用于后期扫尾操作,比如设置cookie、记录日志等
<?phpnamespace App\Http\Middleware;use Closure;class AfterMiddleware{ public function handle($request, Closure $next) { $response = $next($request); // 执行动作 return $response; }}
这里举一个 before 开启 session 最后 after 关闭session并设置session_id到cookie的例子:
public function handle($request, Closure $next){ $this->sessionHandled = true; //如果session驱动已配置,那么我们需要开启session以便为应用准备好数据 //注意Laravel session并没有使用原生的PHP session相关方法,因为它们显得那样蹩脚 if ($this->sessionConfigured()) { $session = $this->startSession($request); $request->setSession($session); } $response = $next($request); // 同样,如果session经过配置那么我们需要关闭session以便将session数据持久化到某些存储介质中 // 我们还会添加session id到响应头cookie中 if ($this->sessionConfigured()) { $this->storeCurrentUrl($request, $session); $this->collectGarbage($session); $this->addCookieToResponse($response, $session); } return $response;}
此外,定义好中间件后,需要在app/Http/Kernel.php文件中注册该中间件,如果我们定义的中间件想要在全局有效,即每次请求都会调用,则将该中间件追加到
2.中间件参数
中间件还可以自定义额外的参数
比如实现年龄在18岁以上并且是男性才能访问某个页面的实现
AgeMiddleware.php
public function handle($request, Closure $next, $gender){ if($request->input('age')>=18 && $gender==$request->input('gender')){ return $next($request); }else{ return redirect()->route('refuse'); }}
对应的路由配置
Route::group(['middleware'=>'age:male'],function(){ Route::get('/write/test',function(){ //使用Age中间件 }); Route::get('/update/test',function(){ //使用Age中间件 });});Route::get('/age/refuse',['as'=>'refuse',function(){ return "18岁以上男子才能访问!";}]);
这里会首先对提交的数据中’age’进行判断是不是大于’18’,然后再对数据中的’gender’参数进行验证是不是’male’
0 0
- laravel_基础_中间件
- laravel_基础_路由及CSRF防护等
- laravel_基础_简单博客_RESTFul风格控制器(resource)
- Laravel_基础_view共享数据
- laravel_基础_Request请求/Cookie/文件上传
- laravel_基础_Response|redirect|cookie|view|json|jsonp|download
- laravel_安装
- Java技术_基础技术(0002)_中间件启动class加载顺序(以tomcat为例)
- Nodejs基础中间件Connect
- Nodejs基础中间件Connect
- Nodejs基础中间件Connect
- Nodejs基础中间件Connect
- Nodejs基础中间件Connect
- Nodejs基础中间件Connect
- Laravel基础-中间件
- 消息中间件 ActiveMQ基础
- 大型主机CICS中间件基础
- 中间件基础架构设计有感
- 实时错误‘91’:对象变量或With块变量未设置——学生系统调错总结二
- Immutable 详解及 React 中实践
- IoC容器和依赖注入模式(转)---Martin Fowler(软件开发之父)
- PYC文件是什么?为什么有pyc文件?
- UVAlive 7308 Tom and Jerry 【几何数学】
- laravel_基础_中间件
- 用户级线程和内核级线程
- SlidingMenu以及日夜模式切换配置
- Washing Clothes poj 3211(01背包)
- Android项目前的准备
- 从苏宁电器到卡巴斯基第06篇:我在佳木斯的日子(中)
- android 6.26 apache 第一行代码 HttpHostConnectException: Connection to
- DirectShow之接口实战篇、
- java基础(八)Math/代码块/继承成员方法指南的关系/继承中成员变量之间的关系/方法的重写/继承中构造方法之间的关系/this和super的区别