読み込み中...

【完全ガイド】PHPルーティングが初心者でも分かる10ステップ

PHPルーティングのイラスト PHP
この記事は約8分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHPルーティングについて学びたいと思っているあなたへ。

この記事を読むことで、PHPルーティングの基本から応用までを理解し、自身でルーティングを設定することができるようになります。

初心者の方でも分かるように、詳細な使い方、注意点、カスタマイズ方法、そしてサンプルコードを交えて解説していきます。

●PHPルーティングとは

PHPルーティングとは、ユーザーがブラウザで特定のURLを入力したときに、どの処理(コントローラーのアクション)を実行するかを定義する仕組みのことを指します。

これにより、URLとコントローラーのアクションが結びつけられ、ユーザーのリクエストに応じた適切なレスポンスを返すことが可能になります。

○ルーティングの基本

PHPにおけるルーティングの基本は、URLとそれに対応するコントローラーのアクションを定義することです。

これは、特定のURLがリクエストされたときに、どのコントローラーのどのアクションを実行するかを指定します。

●PHPルーティングの作り方

それでは、具体的にPHPルーティングの作り方を見ていきましょう。

基本的なルーティングから動的ルーティング、ルート名の指定までをサンプルコードとともに解説します。

○サンプルコード1:基本的なルーティング

まずは、最も基本的なルーティングの設定から始めます。

下記のサンプルコードは、ユーザーが”/”というURLにアクセスしたときに、”HomeController”の”index”アクションを実行するというルーティングを定義しています。

Route::get('/', 'HomeController@index');

このコードでは、Route::getメソッドを使って”/”というURLに対するGETリクエストを定義しています。

そして、そのリクエストが来たときにはHomeControllerindexアクションを実行するように指定しています。

○サンプルコード2:動的ルーティング

次に、動的ルーティングについて見ていきましょう。

動的ルーティングとは、URLの一部をパラメータとして受け取り、そのパラメータに応じて異なるアクションを実行するルーティングのことを指します。

下記のサンプルコードは、ユーザーが”/user/{id}”というURLにアクセスしたときに、”UserController”の”show”アクションを実行し、その際にURLの”{id}”部分をパラメータとして渡すというルーティングを定義しています。

Route::get('/user/{id}', 'UserController@show');

このコードでは、Route::getメソッドを使って”/user/{id}”というURLに対するGETリクエストを定義しています。

そして、そのリクエストが来たときにはUserControllershowアクションを実行するように指定しています。

また、URLの”{id}”部分は動的なパラメータとしてshowアクションに渡されます。

○サンプルコード3:ルート名の指定

ルーティングを定義する際には、それぞれのルーティングに名前をつけることも可能です。

ルート名を指定することで、そのルーティングをコードの中で簡単に参照することができます。

下記のサンプルコードは、”/user/{id}”というURLに対するルーティングに”user.show”という名前をつけています。

Route::get('/user/{id}', 'UserController@show')->name('user.show');

このコードでは、Route::getメソッドでルーティングを定義した後に、nameメソッドを使ってそのルーティングに”user.show”という名前をつけています。

これにより、このルーティングは後から”user.show”という名前で参照することができます。

●PHPルーティングの応用例

以上で、PHPルーティングの基本的な作り方を見てきました。

次に、もう少し応用的なルーティングの設定について見ていきましょう。

ルートグループ、ルートミドルウェア、サブドメインルーティングの例をサンプルコードとともに解説します。

○サンプルコード4:ルートグループ

ルートグループは、複数のルーティングに共通の設定を適用するための機能です。

下記のサンプルコードは、”/admin”というプレフィックスを持つルーティング群を定義しています。

Route::prefix('admin')->group(function () {
    Route::get('users', 'AdminController@users')->name('admin.users');
    Route::get('posts', 'AdminController@posts')->name('admin.posts');
});

このコードでは、Route::prefixメソッドを使って”admin”というプレフィックスを持つルートグループを定義しています。

そして、そのグループ内でRoute::getメソッドを使って各ルーティングを定義しています。

これにより、”/admin/users”や”/admin/posts”といったURLに対するルーティングを一括で定義することができます。

○サンプルコード5:ルートミドルウェア

ルートミドルウェアは、特定のルーティングに対して特定のミドルウェアを適用するための機能です。

下記のサンプルコードは、”auth”ミドルウェアを適用したルーティングを定義しています。

Route::get('/profile', 'ProfileController@show')->middleware('auth');

このコードでは、Route::getメソッドでルーティングを定義した後に、middlewareメソッドを使ってそのルーティングに”auth”ミドルウェアを適用しています。

これにより、このルーティングにアクセスする際には”auth”ミドルウェアが実行され、認証が必要となります。

○サンプルコード6:サブドメインルーティング

サブドメインルーティングは、サブドメインに応じて異なるルーティングを適用するための機能です。

下記のサンプルコードは、”{account}.myapp.com”というサブドメインに対するルーティングを定義しています。

Route::domain('{account}.myapp.com')->group(function () {
    Route::get('user/{id}', 'AccountController@show');
});

このコードでは、Route::domainメソッドを使って特定のサブドメインに対するルートグループを定義しています。

そして、そのグループ内でRoute::getメソッドを使ってルーティングを定義しています。これにより、サブドメインに応じて異なるルーティングを適用することができます。

●注意点と対処法

以上で、PHPルーティングの基本から応用までを見てきましたが、ルーティングを設定する際にはいくつかの注意点があります。

それぞれの注意点とその対処法について説明します。

●カスタマイズ方法

PHPルーティングは、基本的な設定だけでなく、さまざまなカスタマイズが可能です。

ルートマクロとルートモデルバインディングの例をサンプルコードとともに解説します。

○サンプルコード7:ルートマクロ

ルートマクロは、ルーティングの定義を簡単にするためのカスタムメソッドを定義する機能です。

下記のサンプルコードは、”Route::form”というカスタムメソッドを定義しています。

Route::macro('form', function ($uri, $action) {
    return Route::match(['get', 'post'], $uri, $action);
});

Route::form('/contact', 'ContactController');

このコードでは、Route::macroメソッドを使って”form”というカスタムメソッドを定義しています。

そして、そのメソッドを使って”/contact”というURLに対するGETリクエストとPOSTリクエストを同時に定義しています。

○サンプルコード8:ルートモデルバインディング

ルートモデルバインディングは、ルーティングのパラメータを直接モデルのインスタンスに変換する機能です。

下記のサンプルコードは、”User”モデルに対するルートモデルバインディングを定義しています。

Route::get('user/{user}', function (App\User $user) {
    return $user->name;
});

このコードでは、Route::getメソッドでルーティングを定義する際に、パラメータとして受け取る”user”を”App\User”モデルのインスタンスとして受け取っています。

これにより、ユーザーIDを手動で検索する必要がなくなります。

まとめ

PHPルーティングは、ユーザーのリクエストに応じて適切なレスポンスを返すための重要な機能です。

この記事では、PHPルーティングの基本から応用、注意点、カスタマイズ方法までを詳しく解説しました。

これらの知識を活用して、自身のPHPアプリケーションのルーティングをより効率的に管理してみてください。