今回は前回に引き続き、Webアプリの開発について記事を書いていこうと思います。
ルーティングとは?
LaravelのルーティングはHTTPリクエストのパスや内容に対応するコントローラに処理を渡します。
リソースコントローラー(7つまとめて作成)について
7つのメソッドをまとめて作ることができます。
7つのURLとまとめて作るメソッドをつくります。
php artisan make:controller ContactFormController ̶--resource
「--resource」をつけることで、7つのメソッドをまとめて作れます。
下記パスで7つのメソッドがひな形で作成されます。
app/Http/Controllers
次に、コントローラを指すリソースルートを登録します。
use App\Http\Controllers\ContactFormController;
「Route::~」SAFARIルートの7つまとめてってこどでリソースというメソッドがあります。
そこに、「contacts」フォルダを記載し、第2引数がコントローラーの名前ですので、「ContactFormController::class」を記載します。
Route::resource(`contacts`, ContactFormController::class);
web.phpに記載が終わったら、コマンドプロンプトに戻り、listのコマンドをたたきます。
結果にURLが7つ増えていることが確認できます。
■コマンドプロンプトにて
php artisan route:list
リソースコントローラー(1行ずづバージョン)について
前では7つのリソースをまとめて作成しましたが、
1行ずづ記載をすることも可能です。
Route::get('contacts', [ ContactFormController::class, 'index'])->name('contacts.index');
⇒Routeゲットでたたくフォルダ名を記載し、
フォルダ名をたたき使うコントローラーを指定します。
コントローラーの中のメソッドを書きます。
※「name」をつけるとroot情報に名前をつけることができ、ビュー側でリンクなどを張るときに便利です。
web.phpに記載が終わったら、コマンドプロンプトに戻り、listのコマンドをたたきます。
結果にURLが1つ増えていることが確認できます。
■コマンドプロンプトにて
php artisan route:list
同じようなファイル名が続いた場合
下記だと見にくいためグループ化して、記載することができます。
下記はグループ化していない状態です。
Route::get('contacts', [ ContactFormController::class, 'index'])->name('contacts.index');
Route::get('contacts', [ ContactFormController::class, 'index'])->name('contacts.index');
Route::get('contacts', [ ContactFormController::class, 'index'])->name('contacts.index');
Route::get('contacts', [ ContactFormController::class, 'index'])->name('contacts.index');
Route::get('contacts', [ ContactFormController::class, 'index'])->name('contacts.index');
Route::get('contacts', [ ContactFormController::class, 'index'])->name('contacts.index');
Route::get('contacts', [ ContactFormController::class, 'index'])->name('contacts.index');
グループ化した状態だと下記のコマンドとなります。
// グループ化してまとめるとシンプルに書ける
Route::prefix('contacts') // 頭に contacts をつける
->middleware(['auth']) // 認証
->name('contacts.') // ルート名
->controller(ContactFormController::class) // コントローラ指定(laravel9から)
->group(function(){ // グループ化
Route::get('/', 'index')->name('index'); // 名前つきルート
});
#まとめ
リソースコントローラーには2つの記載方法があります。
まとめて記載できる方法と一つずづ記載する方法があります。
現場入った際には、これらを使いわけるとよいですね!