目次
ミドルウェア
Routing Group
ホームページ バックエンド開発 PHPチュートリアル Laravel学習メモ - ルーティング(ミドルウェアとルーティンググループ)

Laravel学習メモ - ルーティング(ミドルウェアとルーティンググループ)

Jun 23, 2016 pm 01:25 PM

この記事には次のセクションが含まれています。読む前に、公式ドキュメントの関連部分を簡単に読んでおくことをお勧めします。

ミドルウェア

ルートグループ

ミドルウェア

公式ドキュメントでは、この部分はルーティングの後ろにありますが、より合理的な前に移動したいと思います。

これは何ですか?

ルーティングは、クライアントからのリクエストを分析し、ルーティング ルールに従って対応する処理ロジックにリクエストを分配するプロセスであることはわかっています。しかし、舞台裏に例えてみましょう。バックエンドには誰もがアクセスできるわけではありません。正式な処理ロジックの前に、権限があるかどうか、要求されたデータが合法であるかどうかなどの検証を行う必要があります。

このとき、ルーティング プロセスの一部??ミドルウェアが機能します。

HTTP ミドルウェアは、アプリケーションに入る HTTP リクエストをフィルタリングする便利なメカニズムを提供します。たとえば、Laravel には、ユーザーが認証されていない場合にユーザーをログイン ページに誘導するミドルウェアがデフォルトで含まれています。ユーザーが認証されると、ミドルウェアはリクエストの続行を許可します。

上記の内容は、中国語版のlaravel5ドキュメントからのものであり、ミドルウェアの役割を非常によく説明しています。 laravel5以前のバージョンではフィルター(ルーティングフィルター)のみでしたが、ミドルウェアの目的は現在のミドルウェアと同様で、リクエストと処理ロジックの間の中間処理として使用されるのが一般的です。事後の判断と検証。ミドルウェアを介することで、バックグラウンドコントローラーと同様に、訪問者が誰かを意識することなく、ユーザーリストや記事リストの表示、追加された記事の処理などに集中するだけでコントローラー内の独自のロジックに集中できます。は正当なバックエンド管理者であるため、アクセス許可の検証作業はミドルウェアに任せる必要があります。ミドルウェア検証に合格した場合は通常どおり処理され、失敗した場合はリダイレクトされるなどの処理が行われます。

Laravel にはデフォルトで多くのミドルウェアが組み込まれており、デフォルトで有効になっています。 app/Http/Kernel.php を編集することで、これらのミドルウェアを有効にするかどうかを決定できます。自分で開発したミドルウェアもここに登録されます。

app/Http/Kernel.php の $middleware 配列はグローバル ミドルウェアです。つまり、内部の CSRF 検証ミドルウェアなど、これらのミドルウェアを使用して任意のルートが適用されます。

グローバル ミドルウェアが必要ない場合もあります。この場合、特定のミドルウェアを app/Http/Kernel.php ファイルの $routeMiddleware 配列に登録できます。配列のキー名はミドルウェアのエイリアスです。キーの値は、

'auth' => 'AppHttpMiddlewareAuthMiddleware' などのミドルウェア クラスに固有です。

特定のルートで特定のミドルウェアを使用する方法については、以下に続けて説明します。

app/Http/Kernel.php ファイルの $routeMiddleware 配列に独立したミドルウェアを登録しました。このミドルウェアは単独で使用することも、ルートおよびルーティング グループにバインドすることもできます。ルートを定義するときは、次のようになります:

Route::get('admin/profile', ['middleware' => 'auth', function(){    //}]);
ログイン後にコピー

http://yourdomain/admin/profile にアクセスすると、最初にグローバル ミドルウェアを通過し、次に app/Http の $routeMiddleware 配列を通過します。 /Kernel.php auth という名前の定義済みミドルウェア。

定義方法についてこれまで述べてきましたが、ミドルウェア クラスはどのようにあるべきでしょうか?ドキュメントを読んだことがある方は、次のようになっていることがわかると思います (以下のコードとドキュメントにはいくつかの違いがあります):

<?phpnamespace App\Http\Middleware;use Closure;use Auth;class AuthMiddleware {    /**     * Run the request filter.     *     * @param  \Illuminate\Http\Request  $request     * @param  \Closure  $next     * @return mixed     */    public function handle($request, Closure $next)    {        // If the user is not logged in        if (Auth::guest()) {            if ($request->ajax()) {                return response('Unauthorized!', 401);            } else {                return redirect()->guest('admin/login');            }        }        view()->share('loign', true);        return $next($request);    }}
ログイン後にコピー

上記のコードは記述されたミドルウェアであり、handle メソッドの内容はミドルウェアの実際のコード。

コードの 18 行目から 27 行目は、おそらくユーザーがログインしているかどうかを判断するプロセスであることがわかります。ログインしていない場合は、リクエストが ajax タイプであるかどうかが判断され、ajax タイプのリクエストは を返します。 「権限がありません。」というメッセージが表示された json データ (理解してください)、それが標準リクエストの場合、ログイン インターフェイスにリダイレクトされます。

検証または操作前のロジックがミドルウェアに渡される場合、ミドルウェアがない場合は、コード return $next($request) (上記の例の 28 行目) を使用してリクエストを次のミドルウェアに送信することを忘れないでください。後のソフトウェアでは、処理ロジック (コントローラーなど) を取得します。

上記のミドルウェアは運用前ミドルウェアです。これはどういう意味ですか?実際の処理ロジックの前に動作するミドルウェアであり、プレミドルウェアです。逆に、実際の処理ロジックを実行した後に渡されるミドルウェアがポストミドルウェアです。

ミドルウェア後の構造は次のとおりです:

<?phpnamespace App\Http\Middleware;class AfterMiddleware implements Middleware {    public function handle($request, Closure $next)    {        $response = $next($request);        // 具体的中间件逻辑代码        return $response;    }}
ログイン後にコピー

$response = $next($request) が追加され、戻り値も変更されていることが違いであることがわかります。 $next($request) によって返される値は、リクエスト全体が多数の特定の処理ロジックを経た後に生成される最終的な応答であることは容易に理解できます。この応答は通常、HTML コードの束 (レンダリングされたビュー) であるか、またはその可能性があります。 json などにするこのレスポンスに対してミドルウェアで最終処理を実行し、最終的に処理結果を返すことができます。

Routing Group

この公式ドキュメントには非常に詳しく説明されていますが、理解するのは簡単ではないようです。まず、適用可能なシナリオについて説明します。

ルーティング グループは、特定の種類のルートをグループ化するためによく使用されます。このルーティング グループに割り当てられたミドルウェア、フィルターなどは、グループ内のすべてのルートに適用されます。

说白了,路由组就是简化一部分路由定义过程的。比如,后台的我都想通过地址http://yourdomain/admin/***访问,假如我有用户(user)、文章(article)两个模块,他们的访问都要经过一个验证权限的中间件,我需要这样定义路由:

Route::get('admin/user', ['middleware' => 'authority', function() {    // blablabla...}]);Route::get('admin/article', ['middleware' => 'authority', function() {    // blablabla...}]);
ログイン後にコピー

现在只有两条路由,我多写几个admin,middleware没啥的,但系统庞大以后,每个都要单独写对应的中间件,容易出错,不易管理。这时候,就应该使用路由组:

Route::group(['prefix' => 'admin', 'middleware' => 'authority'], function() {    Route::get('user', function() {        // blablabla...    });    Route::get('article', function() {        // blablabla...    });});
ログイン後にコピー

同时,利用路由组,定义子域名变得十分容易:

Route::group(['domain' => 'bbs.yourdomain.com'], function() {    Route::get('topic', function() {        // blablabla...    });    Route::get('node', function() {        // blablabla...    });});
ログイン後にコピー

子域名也可以拥有通配符,以此实现更为灵活的结构。比如我希望我的网站每一个用户都拥有自己的二级域名,类似于这样:userA.yourdomain.com,userB.yourdomain.com。这时候可以这样写:

Route::group(['domain' => '{username}.myapp.com'], function(){    Route::get('profile/{type}', function($username, $type)    {        //    });});
ログイン後にコピー

可以通过参数获取域名上的通配符匹配的值。

除这些以外,路由组带来的便利相当丰富,在这里基本把路由组存在的意义说完了,其他关于路由组的可以移步至官方文档了解。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPロギング:PHPログ分析のベストプラクティス PHPロギング:PHPログ分析のベストプラクティス Mar 10, 2025 pm 02:32 PM

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

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

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

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

See all articles