ect先のURIとルーティングで指定したURIについ...
return redirect('/drills/new')->with('flash_message',__('Registered'));
・補足パターン:
return redirect()->route('drills.new')->with('flash_message', __('Registered.'));
上記のDrillsControllerのcreateアクション後のリダイレクトの行い方について、
直にパスを書いて指定してリダイレクトを行っているか(動画内パターン)、routeメソッドを使って名前付きルートdrills.createのURIを指定してリダイレクを行っているか(補足パターン)の違いがあるだけです。
特にどちらかが良くてどちらかが悪いということは無いので、ご自身がわかりやすい方を使って問題ありません。
>フォームのactionの指定先は'/drills'になっているのに対し、リダイレクト先は'/drills/new'となっています
この辺りは基礎的な部分なので、もし理解が浅いのであれば復習をしておきましょう。
例えばウェブサービス部の内容を思い出してみてください。profEdit.php等、下記のようなコードが書かれたファイルが沢山あったはずです。
1.hogehoge.phpファイル内のformで、action=""にして(そうするとactionの指定先は自ファイルになるのでしたね)POST送信を行う。
2.hogehoge.php内で、if(!empty($_POST))でPOST送信が合ったことを確認し、以下の処理を実行する。
3. 処理完了後header("fugafuga.php");で別ファイルfugafuga.phpを指定してリダイレクトを行う(fugafuga.phpにページ遷移する)
リダイレクトとはあるページから別ページへの転送処理のことで、素のPHPではheader()で実行していたものです。そしてformタブ内のaction属性は、あくまでフォームデータの送信先URLを指定するためのものであり、リダイレクトとは全くの別物です。
なので、フォームのaction属性とリダイレクト先を一致させる必要はありません。
>Route::~~で指定するURIは本来、移動先のURIページに指定する
ここは少しweb.phpのルーティング定義の解釈を誤っています。
名前付きルートを指定したredirect()の際は、Route::~~の第1引数に指定されたURIを解決し、そこに対してページを遷移させるので少しややこしいですが、ルーティング定義の第1引数で指定されているURIは"移動先"ではありません。
web.phpのルーティング定義の内容は、「第1引数で指定したURIに対してPOST・GETリクエストの送信があったら、第2引数の処理を実行する(コントローラーが指定されていれば、そのコントローラー@アクションに処理を振り分ける)」です。
なので今回の
Route::post('/drills', 'DrillsController@create')->name('drills.create');
の読み解き方は、
「第1引数で指定したhttp://~~~/drillsに対してPOST送信が行われたら、第2引数で指定したDrillsControllerのcreateアクションに振り分ける」となります。
第一引数の'/drills'は"移動先"ではなく、あくまでPOSTリクエストの送信先です。
レッスンの10-11でルーティングについて説明されていますので、再度復習してみてください。
また、下記ブログ記事もLaravelのルーティングについて詳しく書かれているので参考にしてみてください。
https://blog.capilano-fw.com/?p=556
部活の学習一覧
Lesson 01 | Laravelと環境構築〜その1〜
Lesson 02 | Laravelと環境構築〜その2〜
Lesson 03 | Laravelと環境構築〜その3〜
Lesson 04 | Laravelでタイピングサービスを作ろう!〜テーブル設計〜
Lesson 05 | Laravelでタイピングサービスを作ろう!〜マイグレーションとテーブル作成〜
Lesson 06 | Laravelでタイピングサービスを作ろう!〜artisanコマンドと認証機能〜
Lesson 07 | Laravelでタイピングサービスを作ろう!〜Seeder〜
Lesson 08 | Laravelでタイピングサービスを作ろう!〜Bladeテンプレート〜
Lesson 09 | Laravelでタイピングサービスを作ろう!〜タイピング登録とルーティング〜
Lesson 10 | Laravelでタイピングサービスを作ろう!〜routeメソッドと多言語対応〜
Lesson 11 | Laravelでタイピングサービスを作ろう!〜バリデーションとEloquentORM〜
Lesson 12 | Laravelでタイピングサービスを作ろう!〜モデルで登録〜
Lesson 13 | Laravelでタイピングサービスを作ろう!〜ORMとルーティング、CSRF〜
Lesson 14 | Laravelでタイピングサービスを作ろう!〜一覧表示と任意・必須パラメータ〜
Lesson 15 | Laravelでタイピングサービスを作ろう!〜編集機能〜
Lesson 16 | Laravelでタイピングサービスを作ろう!〜削除機能〜
Lesson 17 | Laravelでタイピングサービスを作ろう!〜laravel-mixとvue.js〜
Lesson 18 | Laravelでタイピングサービスを作ろう!〜vue.jsの処理その1〜
Lesson 19 | Laravelでタイピングサービスを作ろう!〜vue.jsの処理その2〜
Lesson 20 | Laravelでタイピングサービスを作ろう!〜vue.jsの処理その3〜
Lesson 21 | Laravelでタイピングサービスを作ろう!〜ファサード〜
Lesson 22 | Laravelでタイピングサービスを作ろう!〜ビューコンポーザーとGuard〜
Lesson 23 | Laravelでタイピングサービスを作ろう!〜ビューコンポーザーその2〜
Lesson 24 | Laravelでタイピングサービスを作ろう!〜サービスプロバイダーとSQLログ出力〜
Lesson 25 | Laravelでタイピングサービスを作ろう!〜カラム追加とリレーション〜
Lesson 26 | Laravelでタイピングサービスを作ろう!〜カラム追加とリレーションその2〜
Lesson 27 | Laravelでタイピングサービスを作ろう!〜ミドルウェア〜
ご意見箱
《関連部分》
前レッスン(lesson11)動画:5:40~
本レッスン(lesson12)動画:5:50~
いつもお世話になっております。
新規登録の処理を行った後のリダイレクト先と、
ルーティングで指定したURIの相違についての質問です。
●前回の動画内では新規登録におけるルーティングを以下のように設定しておりました。
[web.php]
Route::post('/drills', 'DrillsController@create')->name('drills.create');
●また、同じく前回の動画で入力フォームには次のように設定しておりました。
[new.blade.php]
<form method="POST" action="{{ route('drills.create') }}">
○今回の動画ではリダイレクト先を以下のように設定しておりました。
[DrillsController]
return redirect('/drills/new')->with('flash_message',__('Registered'));
すると、フォームのactionの指定先は'/drills'になっているのに対し、
リダイレクト先は'/drills/new'となっています。
Route::~~で指定するURIは本来、
移動先のURIページに指定するという解釈していたのですが、
今回のように移動先とリダイレクト先が異なることが起きたため、少々混乱してしまいました。
この混乱をなくすため、補足にある方法を使い、
return redirect()->route('drills.create')->with('flash_message', __('Registered.'));
のように、実際にアクションを呼び出しているルーティングと同じURIを指定する事で、
移動先を'drills'に一致させる方法が良いのではないかと考えました。
今回の相違については、特に問題視する必要はないのでしょうか、
また、他にURIに指定するものの基準があるのでしょうか。
細かい部分についての質問で恐縮ですが、
ルーティングのURIの指定先について理解を深めたく、質問させていただきました。
ご教授いただければ幸いです。どうぞよろしくお願いいたします。