Laravel 5 控制器如何实现基于自身的中间件
声明:本文由夭℃~空投稿,未经作者许可,禁止转载!
这个想法的产生背景是在我碰到一个实际需求的时候。当时我碰到了这么一个需求:
首先我有很多模块,每个模块都有一个鉴权方式。
我本来想用中间件来做,但是随即发现,由于每个模块的过滤方式不一样导致中间件的数量一下子增加了很多。而且,由于中间件的分离到了中间件的文件夹去,且并不能实现中间件的复用价值。所以,我抛弃了使用中间件的方法。
这个时候,我想到,每个控制器自己有独立的 construct不就好了,这样每个控制器都有自己的独特的鉴权方式。
但是问题随之而来,Laravel 的控制器虽然能实现自动 construct,但是在 construct里面的,并不能实现 response,也就是说在 construct里面的 response将会被忽略。不是实现返回错误信息,或者重定向的需求。
翻了文档之后似乎找不到一个完美的解决方法。于是,我去翻源代码,最终把目标放 beforeFilter,并用 boforeFilter实现了这个需求。
重新整理适用场景:
本用法适用于每个控制器都需要同样的一套过滤,而具体的过滤方式由控制器自身决定,也就是基于控制器本身的中间件。
代码如下:
首先建立一个基础的控制器:
<?phpnamespace App\Http\Controllers\Api\Business;use RuntimeException;use Illuminate\Routing\Controller as BaseController;use Illuminate\Auth\Guard;use Illuminate\Http\Request;abstract class Controller extends BaseController{ protected $request; protected $auth; public function __construct(Request $request,Guard $auth){ $this->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。
然后定义模块控制器继承这个方法:
<?phpnamespace App\Http\Controllers\Api\Business;class TicketController extends Controller{ //鉴定权限 protected function checkPermission(){ //return redirect()->to('某个url'); //return view(); //return 'string'; ... }}
只要 checkPermission里面返回 response,那么就会跟中间件一样作为整个请求的 response.如果里面不返回任何东西,那么php会自动返回 null。只要是 null,就代表着通过 checkPermission的验证。
这样就能实现基于控制器自身的中间件,更多用法有待发掘。
注:目前这个我在5.0版本使用通过,更高的版本有待测试。
本文由夭℃~空投稿,他邮箱是 anwelblue@qq.com,有什么问题欢迎与他一起探讨,此外你还可以在学院二群找到他: 542175836。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Alipay Php ...

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

L'article traite de la liaison statique tardive (LSB) dans PHP, introduite dans PHP 5.3, permettant une résolution d'exécution de la méthode statique nécessite un héritage plus flexible. Problème main: LSB vs polymorphisme traditionnel; Applications pratiques de LSB et perfo potentiel

L'article traite des fonctionnalités de sécurité essentielles dans les cadres pour se protéger contre les vulnérabilités, notamment la validation des entrées, l'authentification et les mises à jour régulières.

L'article examine l'ajout de fonctionnalités personnalisées aux cadres, en se concentrant sur la compréhension de l'architecture, l'identification des points d'extension et les meilleures pratiques pour l'intégration et le débogage.

Envoyant des données JSON à l'aide de la bibliothèque Curl de PHP dans le développement de PHP, il est souvent nécessaire d'interagir avec les API externes. L'une des façons courantes consiste à utiliser la bibliothèque Curl pour envoyer le post� ...

L'application du principe solide dans le développement de PHP comprend: 1. Principe de responsabilité unique (SRP): Chaque classe n'est responsable d'une seule fonction. 2. Principe ouvert et ferme (OCP): les changements sont réalisés par extension plutôt que par modification. 3. Principe de substitution de Lisch (LSP): les sous-classes peuvent remplacer les classes de base sans affecter la précision du programme. 4. Principe d'isolement d'interface (ISP): utilisez des interfaces à grain fin pour éviter les dépendances et les méthodes inutilisées. 5. Principe d'inversion de dépendance (DIP): les modules élevés et de bas niveau reposent sur l'abstraction et sont mis en œuvre par injection de dépendance.

Une introduction officielle à la caractéristique non bloquante de l'interprétation approfondie de ReactPHP de la caractéristique non bloquante de ReactphP a suscité de nombreux développeurs: "ReactPhpisnon-blockingByDefault ...
