この記事では、ミドルウェアの概念を理解するために、Laravel フレームワークを深く掘り下げていきます。この記事の前半は、ミドルウェアの概要とその実際の使用法から始まります。
続けて、Laravel アプリケーションでカスタムミドルウェアを作成する方法について説明します。カスタムミドルウェアを作成したら、リクエスト処理フロー中に実際に呼び出せるように、それをLaravelに登録するために利用できるオプションを調べます。
Laravel の基本的な概念と、スキャフォールディング コードを生成するための Artisan コマンド ライン ツールについては十分に理解していただければ幸いです。もちろん、最新の Laravel アプリケーションが正常にインストールされていれば、この記事で提供されている例をすぐに実行できます。
Laravel のミドルウェアとは何ですか?
ミドルウェアは、Laravel アプリケーションの典型的なリクエスト処理フローに接続できるメカニズムと考えることができます。通常の Laravel ルート処理は、リクエスト処理の特定の段階を通過します。ミドルウェアは、アプリケーションが通過する必要があるレイヤーの 1 つです。
では、Laravel のリクエスト処理プロセスを接続する意味は何でしょうか?アプリケーション起動の初期段階で行う必要があることについて考えてください。たとえば、ユーザーは、現在のルートへのアクセスを許可するかどうかを決定するために、早い段階で認証される必要があります。
ミドルウェアで実現できると考えられるものは次のとおりです。
- 記録リクエスト
- ユーザーをリダイレクトする
- 受信パラメータの変更/削除
- Laravel アプリケーションによって生成された応答の操作
- 他にもあります
実際、デフォルトの Laravel アプリケーションには、いくつかの重要なミドルウェアがすでに付属しています。たとえば、サイトがメンテナンス モードかどうかを確認するミドルウェアがあります。一方で、入力リクエストパラメータをサニタイズするミドルウェアもあります。先ほど述べたように、ユーザー認証はミドルウェア自体によっても実装されます。
これまでの説明で、ミドルウェアという用語に自信が持てるようになったと幸いです。まだ混乱している場合でも、心配しないでください。次のセクションでカスタム ミドルウェアの構築を開始します。これは、実際の世界でミドルウェアを使用する方法を正確に理解するのに役立ちます。
カスタムミドルウェアの作成方法
このセクションでは、カスタム ミドルウェアを作成します。しかし、カスタム ミドルウェアは正確に何を実現するのでしょうか?
最近、ユーザーがモバイル デバイスから Web サイトにアクセスする場合、すべてのクエリ文字列パラメーターを変更せずに、対応するサブドメイン URL にリダイレクトする必要があるというクライアントからのカスタム要件に遭遇しました。これは、この特定のシナリオで Laravel ミドルウェアを使用する方法を示すのに最適なユースケースであると思います。
この場合にミドルウェアを使用する理由は、アプリケーションのリクエスト フローにフックする必要があるためです。カスタム ミドルウェアでは、ユーザー エージェントをチェックし、ユーザーがモバイル デバイスを使用している場合は、対応するモバイル URL にリダイレクトされます。
すべての理論を議論した後、実際の開発を開始しましょう。これが新しい概念を理解する最良の方法ですよね。
Laravel 開発者としてカスタム機能を作成したい場合、ほとんどの場合 Artisan ツールを使用して基本的なテンプレート コードを作成することになります。これを使用して、カスタム ミドルウェアの基本的なテンプレート コードを作成してみましょう。
コマンド ラインに移動し、プロジェクトのドキュメント ルートに移動します。次のコマンドを実行して、カスタム ミドルウェア テンプレート MobileRedirect
を作成します。
これにより、次のコードを含むファイル app/Http/Middleware/MobileRedirect.php
が作成されます。
通常、handle
メソッドの実装に気づくでしょう。これはミドルウェアのバックボーンとして機能し、実装するミドルウェアのメイン ロジックが配置される場所です。
この機会に、Laravel に付属するミドルウェアの種類を紹介します。大きく分けてフロントミドルウェアとポストミドルウェアの2種類があります。
名前が示すように、ビフォア ミドルウェアは、リクエストが実際に処理され、レスポンスが構築される前に実行されるミドルウェアです。一方、ポストミドルウェアは、リクエストがアプリケーションによって処理された後に実行され、この時点までにレスポンスはすでに構築されています。
私たちの場合、リクエストを処理する前にユーザーをリダイレクトする必要があるため、プレミドルウェアとして開発されます。
次に、ファイル app/Http/Middleware/MobileRedirect.php
を次の内容で変更します。
簡単にするために、mobile
クエリ文字列パラメータが存在するかどうかのみを確認します。TRUE
に設定されている場合、ユーザーは対応するモバイル デバイス サイト URL にリダイレクトされます。もちろん、リアルタイム検出が必要な場合は、ユーザー エージェント検出ライブラリを使用することになります。
さらに、mobile-site-url-goes-here
ルートはデモンストレーション用の単なるプレースホルダーであるため、正しいルートまたは URL に置き換えることをお勧めします。
按照我们的自定义逻辑,调用 $next($request)
允许在应用程序链中进一步处理请求。在我们的例子中需要注意的重要一点是,我们将移动检测逻辑放置在 $next($request)
调用之前,有效地使其成为一个 before 中间件。
这样,我们的自定义中间件就几乎准备好进行测试了。目前,Laravel 无法了解我们的中间件。为此,您需要向 Laravel 应用程序注册您的中间件,这正是我们下一节的主题。
在进入下一部分之前,我想演示一下后中间件的外观,以防万一有人对此感到好奇。
<?php namespace App\Http\Middleware; use Closure; class CustomMiddleWare { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $response = $next($request); /* your custom logic goes here */ return $response; } }
正如您已经注意到的,中间件的自定义逻辑在 Laravel 应用程序处理请求后执行。此时,您还可以访问 $response
对象,如果您愿意,它允许您操作它的某些方面。
这就是 after 中间件的故事。
我们的自定义中间件正在运行
本节描述了向 Laravel 应用程序注册中间件的过程,以便在请求处理流程中实际调用它。
继续打开文件 app/Http/Kernel.php
并查找以下代码片段。
/** * The application's global HTTP middleware stack. * * These middleware are run during every request to your application. * * @var array */ protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ];
如您所见,$middleware
保存了 Laravel 默认安装附带的中间件数组。此处列出的中间件将根据每个 Laravel 请求执行,因此它是放置我们自己的自定义中间件的理想选择。
继续添加我们的自定义中间件,如以下代码片段所示。
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, \App\Http\Middleware\MobileRedirect::class, ];
现在,尝试使用查询字符串 mobile=1
访问任何 Laravel 路由,这应该会触发我们的中间件代码!
这就是您应该注册需要在每个请求上运行的中间件的方式。但是,有时您希望仅针对特定路由运行中间件。让我们检查一下如何使用 $routeMiddleware
来实现这一点。
在我们当前示例的上下文中,我们假设如果用户访问您网站上的任何特定路由,他们将被重定向到移动网站。在这种情况下,您不想将中间件包含在 $middleware
列表中。
相反,您希望将中间件直接附加到路由定义,如下所示。
Route::get('/hello-world', 'HelloWorldController@index')->middleware(\App\Http\Middleware\MobileRedirect::class);
事实上,我们可以更进一步,为我们的中间件创建一个别名,这样您就不必使用内联类名。
打开文件 app/Http/Kernel.php
并查找 $routeMiddleware
,它保存了别名到中间件的映射。让我们将我们的条目包含到该列表中,如以下代码片段所示。
protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'mobile.redirect' => \App\Http\Middleware\MobileRedirect::class ];
修改后的路由定义如下所示。
Route::get('/hello-world', 'HelloWorldController@index')->middleware('mobile.redirect');
这就是向 Laravel 应用程序注册中间件的故事。这非常简单,不是吗?
事实上,我们已经读到了本文的结尾,我希望您能充分享受它。
结论
探索任何框架中的架构概念总是令人兴奋的事情,这就是我们在本文中探索 Laravel 框架中的中间件时所做的事情。
从中间件的基本介绍开始,我们将注意力转移到在 Laravel 应用程序中创建自定义中间件的主题。文章的后半部分讨论了如何向 Laravel 注册自定义中间件,这也是探索附加中间件的不同方式的机会。
希望这次旅程富有成效,并且本文能够帮助您丰富您的知识。另外,如果您希望我在即将发表的文章中提出特定主题,您可以随时给我留言。
今天就这样,如果有任何疑问,请随时使用下面的提要来提出您的疑问!
以上がLaravelミドルウェアの基礎をマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

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

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

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

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

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

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

ホットトピック









