LoginSignup
2
1

More than 1 year has passed since last update.

リソースコントローラーを用いた際に、定義済みのルートを上書きしてしまってLaravel Route [ ] not defined.が発生。

Posted at

<問題の概要>
StepControllerというControllerを用いて、ビューファイル(create.blade.php)を表示。
その際に、Route [step.store] not defined.のエラーが発生。

step.storeは、create.blade.php内でformに組み込んだルートの名称。
つまり、step.storeのルート定義が「web.php」内でうまくいっておらず、エラーが発生した模様。

エラー発生時のweb.php
<?php

use App\Http\Controllers\StepController;
use Illuminate\Support\Facades\Route;

Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth'])->name('dashboard');

Route::resource('step', StepController::class);
Route::post('step', [StepController::class, 'complete'])->name('step.complete');

require __DIR__.'/auth.php';

上のコードでは、
Route::resource('step', StepController::class);
の直後に
Route::post('step', [StepController::class, 'complete'])->name('step.complete');
を記載しているが、この記載をしたことにより '/step' のpostメソッドを上書きしてしまったのが原因だった模様。

Route::resource('step', StepController::class);は、リソースコントローラーと言って、いかに示す7行分のrouteを1行でかける優れもの。

Route::get('step', [StepController::class, 'index'])->name('step.index');
Route::get('step/create', [StepController::class, 'create'])->name('step.create');
Route::post('step', [StepController::class, 'store'])->name('step.store');
Route::get('step/{step}', [StepController::class, 'show'])->name('step.show');
Route::get('step/{step}/edit', [StepController::class, 'edit'])->name('step.edit');
Route::patch('step/{step}', [StepController::class, 'update'])->name('step.update');
Route::delete('step/{step}', [StepController::class, 'destroy'])->name('step.destroy');

この7行の中で、'/step' のpostメソッドは「step.store」で定義しているが、直後に書いた「step.complete」も、'/step' のpostメソッドで定義されている。
そのため、step.storeが定義されていないことになりエラーが発生してしまった。

こういったルート定義の問題解決をするためには下記のコマンドを実行して、定義されているルート一覧を表示するのが有効だと学んだ。

php artisan route:list
2
1
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
2
1