Laravel 5 控制器如何实现基于自身的中间件
声明:本文由夭℃~空投稿,未经作者许可,禁止转载!
这个想法的产生背景是在我碰到一个实际需求的时候。当时我碰到了这么一个需求:
首先我有很多模块,每个模块都有一个鉴权方式。
我本来想用中间件来做,但是随即发现,由于每个模块的过滤方式不一样导致中间件的数量一下子增加了很多。而且,由于中间件的分离到了中间件的文件夹去,且并不能实现中间件的复用价值。所以,我抛弃了使用中间件的方法。
这个时候,我想到,每个控制器自己有独立的 construct不就好了,这样每个控制器都有自己的独特的鉴权方式。
但是问题随之而来,Laravel 的控制器虽然能实现自动 construct,但是在 construct里面的,并不能实现 response,也就是说在 construct里面的 response将会被忽略。不是实现返回错误信息,或者重定向的需求。
翻了文档之后似乎找不到一个完美的解决方法。于是,我去翻源代码,最终把目标放 beforeFilter,并用 boforeFilter实现了这个需求。
重新整理适用场景:
本用法适用于每个控制器都需要同样的一套过滤,而具体的过滤方式由控制器自身决定,也就是基于控制器本身的中间件。
代码如下:
首先建立一个基础的控制器:
1 |
|
将 request和 auth放到基础控制器,是为了方便鉴权过程中调用,关键的地方,在于设置 beforeFilter,通过 beforeFilter调用控制器自身的协议方法。至于我在基础控制器里面放 checkPermission是要求所有基于这个控制器的控制器必须重载掉这个方法。 beforeFilter可以设置第二个参数,跟 middleware()一样,可以设置 except或者 only。
然后定义模块控制器继承这个方法:
1 |
|
只要 checkPermission里面返回 response,那么就会跟中间件一样作为整个请求的 response.如果里面不返回任何东西,那么php会自动返回 null。只要是 null,就代表着通过 checkPermission的验证。
这样就能实现基于控制器自身的中间件,更多用法有待发掘。
注:目前这个我在5.0版本使用通过,更高的版本有待测试。
本文由夭℃~空投稿,他邮箱是 anwelblue@qq.com,有什么问题欢迎与他一起探讨,此外你还可以在学院二群找到他: 542175836。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Alipay PHP...

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

Sending JSON data using PHP's cURL library In PHP development, it is often necessary to interact with external APIs. One of the common ways is to use cURL library to send POST�...
