【Laravel 6.x】ネスト構造になっているRESTfulルーティングの定義方法

はじめに

RESTfulルーティングを定義するときはRoute::resourceを使いますが、ネスト構造になっているRESTfulルーティングの定義方法を調べたので記事にします。

前提

おそらく、Laravel 6.xのみ対応だと思います。

※Laravel公式ドキュメントの5.8以前には記載がないため。間違っていたらご指摘ください。

定義方法

一般的なブログを想定します。ブログでは複数の記事を持ち、それぞれの記事に複数のコメントを持ちます。

routes/web.phpを以下のように設定します。

Route::resource('articles', 'ArticlesController');
Route::resource('articles.comments', 'CommentsController');

第1階層と第2階層のリソース名をピリオドで繋げます。

Route::resource('articles', 'ArticlesController');
Route::resource('articles/comments', 'CommentsController');

ピリオドではなくスラッシュで繋げると、ネストではないURIになるのでご注意ください。

ルーティングを確認してみます。

$ php artisan route:list
+--------+-----------+--------------------------------------------+---------------------------+-------------------------------------------------+--------------+
| Domain | Method    | URI                                        | Name                      | Action                                          | Middleware   |
+--------+-----------+--------------------------------------------+---------------------------+-------------------------------------------------+--------------+
|        | GET|HEAD  | articles                                   | articles.index            | App\Http\Controllers\ArticlesController@index   | web          |
|        | POST      | articles                                   | articles.store            | App\Http\Controllers\ArticlesController@store   | web          |
|        | GET|HEAD  | articles/create                            | articles.create           | App\Http\Controllers\ArticlesController@create  | web          |
|        | GET|HEAD  | articles/{article}                         | articles.show             | App\Http\Controllers\ArticlesController@show    | web          |
|        | PUT|PATCH | articles/{article}                         | articles.update           | App\Http\Controllers\ArticlesController@update  | web          |
|        | DELETE    | articles/{article}                         | articles.destroy          | App\Http\Controllers\ArticlesController@destroy | web          |
|        | GET|HEAD  | articles/{article}/comments                | articles.comments.index   | App\Http\Controllers\CommentsController@index   | web          |
|        | POST      | articles/{article}/comments                | articles.comments.store   | App\Http\Controllers\CommentsController@store   | web          |
|        | GET|HEAD  | articles/{article}/comments/create         | articles.comments.create  | App\Http\Controllers\CommentsController@create  | web          |
|        | GET|HEAD  | articles/{article}/comments/{comment}      | articles.comments.show    | App\Http\Controllers\CommentsController@show    | web          |
|        | PUT|PATCH | articles/{article}/comments/{comment}      | articles.comments.update  | App\Http\Controllers\CommentsController@update  | web          |
|        | DELETE    | articles/{article}/comments/{comment}      | articles.comments.destroy | App\Http\Controllers\CommentsController@destroy | web          |
|        | GET|HEAD  | articles/{article}/comments/{comment}/edit | articles.comments.edit    | App\Http\Controllers\CommentsController@edit    | web          |
|        | GET|HEAD  | articles/{article}/edit                    | articles.edit             | App\Http\Controllers\ArticlesController@edit    | web          |
+--------+-----------+--------------------------------------------+---------------------------+-------------------------------------------------+--------------+

たった2行の定義でネスト構造になっているRESTfulルーティングが定義できました。

まとめ

意外と言及している記事がなくてちょっと苦労しました。しかし公式ドキュメントにはしっかり書いてありましたので、ちゃんと公式ドキュメントを確認する癖をつけないとだめですね😅

Controllers - Laravel - The PHP Framework For Web Artisans

関連記事

開発環境(ローカルストレージ)と本番環境(Amazon S3)にトリミング+リサイズした画像を保存する方法
# はじめに 以前、以下の記事を書きました。 - [開発環境と本番環境で画像のアップロード先を分岐する方法 \- AUTOVICE](https://www.autovice.jp/articles/68) - [ローカルやAmazon [...]
2020年3月7日 11:56
Laravel Mixの仕組みをわかりやすく解説:CSSをSASS/SCSSで記述する方法
# はじめに Laravel Mixの仕組みをわかりやすく解説します。Laravel Mixを使ってアセットコンパイルを行うことで、SASS/SCSSでCSSを記述できるようになります。 # Laravel Mixの仕組み まずはじめに、 [...]
2020年3月6日 9:25
【Laravel 6.x】Laravelプロジェクトの名称を変更する方法
# はじめに あまりないケースではありますが、一度作成したLaravelプロジェクトの名称を変更する方法を解説します。ここで言うLaravelプロジェクトの名称とは、以下のコマンドの`Sample`のことを指します。 ```terminal [...]
2020年3月4日 16:24
【Laravel】ローカルディスクやAmazon S3にアップロードした画像をビューで表示する方法
# はじめに 本記事では、ローカルディスクやAmazon S3にアップロードした画像をビューで表示する方法について説明しています。 なお、本記事では画像のアップロードする方法については説明していません。本記事は既に実装済みの画像アップロード [...]
2020年3月4日 15:44
【Laravel】Amazon S3へのアップロードが「403 Access Denied」で失敗する原因と対処方法
# はじめに LaravelでAmazon S3へ画像アップロードする処理を実装し、いざアップロードしようとしたところ、以下のエラーが出て失敗しました。 ``` Error executing "PutObject" on "https: [...]
2020年3月4日 13:33
開発環境と本番環境で画像のアップロード先を分岐する方法
# はじめに この記事では、以下の方針で画像のアップロード先を分岐する方法について解説しています。 - 開発環境:ローカル(storage/app/public/) - 本番環境:Amazon S3 # 事前準備 AWSに未登録の [...]
2020年3月4日 12:52
独自ポリシーの導入手順と注意点(ハマリポイント)を解説
# はじめに ユーザーと記事を関連付けておいて、編集や削除は記事の作成者のみ許可したいときにはポリシーを作成します。今回はポリシーの導入手順と注意点(ハマリポイント)を解説します。 # 導入手順 ## ポリシー作成 ターミナルで以下 [...]
2020年3月1日 10:32
ユーザー認証機能の導入手順と生成されたフォームを日本語化する方法を解説
# はじめに Laravelではユーザー認証機能の導入が簡単にできてしまいます。この記事ではLaravelプロジェクトにユーザー認証機能を追加する手順と、生成されたフォーム(デフォルトでは英語)を日本語化する方法を解説します。 # 前提 [...]
2020年2月29日 13:54