1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Laravel 5 控制器如何实现基于自身的中间件

Laravel 5 控制器如何实现基于自身的中间件

时间:2023-07-06 12:07:01

相关推荐

Laravel 5 控制器如何实现基于自身的中间件

后端开发|php教程

Laravel 5 控制器如何实现基于自身的中间件

后端开发-php教程

声明:本文由夭℃~空投稿,未经作者许可,禁止转载!

电影源码安装教程,vscode插件下载离线,ubuntu 没有 vi,idea教育版tomcat,爬虫aspx,lnmp升级php版本,朔州seo优化哪家好,tp框架网站源码,phpcms 给模板赋值lzw

php分类信息网源码下载,ubuntu管理集群工具,tomcat服务错误代码5,世界疫情数据爬虫,php封装成类的优缺点,莱芜seo推广lzw

这个想法的产生背景是在我碰到一个实际需求的时候。当时我碰到了这么一个需求:

透明主题源码,ubuntu安装命令apk,爬虫股票研报,php ksort,昆明seo结算lzw

首先我有很多模块,每个模块都有一个鉴权方式。

我本来想用中间件来做,但是随即发现,由于每个模块的过滤方式不一样导致中间件的数量一下子增加了很多。而且,由于中间件的分离到了中间件的文件夹去,且并不能实现中间件的复用价值。所以,我抛弃了使用中间件的方法。

这个时候,我想到,每个控制器自己有独立的 construct不就好了,这样每个控制器都有自己的独特的鉴权方式。

但是问题随之而来,Laravel 的控制器虽然能实现自动 construct,但是在 construct里面的,并不能实现 response,也就是说在 construct里面的 response将会被忽略。不是实现返回错误信息,或者重定向的需求。

翻了文档之后似乎找不到一个完美的解决方法。于是,我去翻源代码,最终把目标放 beforeFilter,并用 boforeFilter实现了这个需求。

重新整理适用场景:

本用法适用于每个控制器都需要同样的一套过滤,而具体的过滤方式由控制器自身决定,也就是基于控制器本身的中间件。

代码如下:

首先建立一个基础的控制器:

request = $request; $this->auth = $auth; //统一鉴权 $this->beforeFilter(function(){ return $this->checkPermission(); }); } protected function checkPermission(){ throw new RuntimeException([.get_class($this).] missing method[checkPermission]); }}

将 request和 auth放到基础控制器,是为了方便鉴权过程中调用,关键的地方,在于设置 beforeFilter,通过 beforeFilter调用控制器自身的协议方法。至于我在基础控制器里面放 checkPermission是要求所有基于这个控制器的控制器必须重载掉这个方法。 beforeFilter可以设置第二个参数,跟 middleware()一样,可以设置 except或者 only。

然后定义模块控制器继承这个方法:

to(某个url); //return view(); //return string; ... }}

只要 checkPermission里面返回 response,那么就会跟中间件一样作为整个请求的 response.如果里面不返回任何东西,那么php会自动返回 null。只要是 null,就代表着通过 checkPermission的验证。

这样就能实现基于控制器自身的中间件,更多用法有待发掘。

注:目前这个我在5.0版本使用通过,更高的版本有待测试。

本文由夭℃~空投稿,他邮箱是 anwelblue@,有什么问题欢迎与他一起探讨,此外你还可以在学院二群找到他: 542175836。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。