こんにちは 初心者フリーランスです
今回が初投稿ですが、Laravelの勉強中に躓いたことなどをメモしていこうと思います
もし誤りがあったり理解不足などがあればコメントいただけると嬉しいです!!
今回躓いたことと解消方法
web.php
で名前付きルーティングの階層指定方法が間違ってた(しょうもないミス)
名前付きルートの区切り文字を/ (スラッシュ)
で記述していたため、リダイレクトでnot defined.
エラーになった
誤
Route::get('/contact/complete', [ContactController::class, 'complete'])->name('contact/complete');
正
Route::get('/contact/complete', [ContactController::class, 'complete'])->name('contact.complete');
※ちゃんとURLとviewの名前付きルート指定を理解しましょう
ルーティング
LaravelではWeb.phpにルート設定すると指定したURLを叩くと何を呼び出すかを決められる基本的な記述例
GET メソッド
web.php
Route::get('/contact', [ContactController::class, 'index'])
URL:http://〇〇/contact
処理:ContactControllerのindexメソッド
名前付きルート
名前付きルートを指定する際はRoute::get
にname
メソッドをつなげることで命名できる
これを使えばパスの記述時に名前で指定できるので記述が楽になる
別名をつけるみたいなイメージかな
web.php
// お問合せページの設定
Route::get('/contact', [ContactController::class, 'index'])->name('contact');
// お問合せ完了ページの設定
Route::get('/contact/complete', [ContactController::class, 'complete'])->name('contact.complete');
グローバルなroute関数やto_routeでの記述が楽になる
sample.php
// URLの生成
$url = route('contact');
// リダイレクト
return to_route('contact.complete');
POST メソッド
POSTメソッドではフォーム情報送信などのサーバとの通信で利用する
入力情報をDBに保存したりする際に用いる
以下のサンプルではお問合せページから送信ボタンを押下時した際に
バリデーションチェック、ログの書き込み、完了ページへのリダイレクトの流れで処理が動く
web.php
// お問合せページ
Route::get('/contact', [ContactController::class, 'index'])->name('contact');
// お問合せ情報送信処理
Route::post('/contact', [ContactController::class, 'sendMail']);
// お問合せ完了ページ
Route::get('/contact/complete', [ContactController::class, 'complete'])->name('contact.complete');
ContactController.php
function sendMail(Request $request) {
// バリデーションチェック
$validated = $request->validate([
'name' => ['required', 'string', 'max:255'],
'name_kana' => ['required', 'string', 'max:255', 'regex:/^[ァ-ロワンヴー]*$/u'],
'phone' => ['nullable', 'regex:/^0(\d-?\d{4}|\d{2}-?\d{3}|\d{3}-?\d{2}|\d{4}-?\d|\d0-?\d{4})-?\d{4}$/'],
'email' => ['required', 'email'],
'body' => ['required', 'string', 'max:2000'],
]);
// これ以降の行は入力エラーがなかった場合のみ実行
// ログに書き込んだあと完了ページにリダイレクト
Log::debug($validated['name']. 'さんよりお問い合わせがありました');
return to_route('contact.complete');
}
まとめ
しっかり基礎を理解した上で記述しないとエラーになる今回はURLとルート指定の理解が足りてなくて呼び出しに失敗した
今まで生のPHPしか触ったことがなくてフレームワークを初めて触ったので
MVCモデルやルーティングなどを正しく理解した上で利用していきたい