Laravel 5コントローラーが独自のミドルウェアを実装する方法
声明: この記事は Yao℃~ からエアドロップされたものであり、著者の許可なく複製することはできません。
このアイデアの背景には、実際的なニーズに遭遇したことがあった。そのとき、次のような要件に遭遇しました。
まず、多くのモジュールがあり、各モジュールには認証メソッドがあります。
当初はミドルウェアを使用してこれを実行したいと考えていましたが、各モジュールのフィルタリング方法が異なるため、ミドルウェアの数が突然大幅に増加することがわかりました。また、ミドルウェアがミドルウェアフォルダに分けられているため、ミドルウェアの再利用価値が実現できません。なので、ミドルウェアを使う方法はやめました。
このとき、各コントローラーが独自の独立した構造を持ち、各コントローラーが独自の認証方法を持っていればいいのではないかと思いました。
しかし、Laravel のコントローラーは自動コンストラクトを実装できますが、コンストラクト内の応答を実装することはできません。つまり、コンストラクト内の応答は無視されます。戻りエラー情報やリダイレクトを実装する必要はありません。
ドキュメントを調べても、完璧な解決策が見つからないようです。そこで、ソース コードを確認し、最終的にターゲットを beforeFilter に配置し、beforeFilter を使用してこの要件を達成しました。
該当するシナリオを並べ替えます。
この使用法は、同じフィルタリングのセットを必要とする各コントローラーに適しており、特定のフィルター方法はコントローラー自体によって決定されます。つまり、コントローラー自体のミドルウェア。
コードは次のとおりです。
まず、基本コントローラーを作成します。
<?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]'); }}
認証プロセス中の呼び出しを容易にするために、基本コントローラーにリクエストと認証を配置します。重要な点は、beforeFilter を設定し、beforeFilter を通じてコントローラー独自のプロトコル メソッドを呼び出すことです。基本コントローラーに checkPermission を設定する場合、このコントローラーに基づくすべてのコントローラーがこのメソッドをオーバーロードする必要があります。 beforeFilter は、middleware() と同様に 2 番目のパラメータを設定でき、例外またはのみを設定できます。
次に、このメソッドを継承するモジュール コントローラーを定義します。
<?phpnamespace App\Http\Controllers\Api\Business;class TicketController extends Controller{ //鉴定权限 protected function checkPermission(){ //return redirect()->to('某个url'); //return view(); //return 'string'; ... }}
checkPermission で応答が返される限り、ミドルウェアと同様にリクエスト全体の応答として使用されます。何も返されない場合、php は自動的に null を返します。 nullであればcheckPermissionの検証に合格したことを意味します。
このようにして、コントローラー自体に基づいたミドルウェアを実装でき、さらに多くの用途を発見する必要があります。
注: 現在これをバージョン 5.0 で使用していますが、それ以降のバージョンはまだテストされていません。
この記事は Yao℃~ によってエアドロップされました。質問がある場合は、彼と議論することもできます。彼は大学の 2 番目のグループにいます: 542175836。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

ReactPhpの詳細な解釈の非ブロッキング機能の公式紹介は、多くの開発者の質問を呼び起こしました。
