LoginSignup
3
0

More than 1 year has passed since last update.

Laravel 9 名前付きルートの階層指定方法

Posted at

こんにちは 初心者フリーランスです
今回が初投稿ですが、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::getnameメソッドをつなげることで命名できる
これを使えばパスの記述時に名前で指定できるので記述が楽になる
別名をつけるみたいなイメージかな

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モデルやルーティングなどを正しく理解した上で利用していきたい
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0