<問題の概要>
StepControllerというControllerを用いて、ビューファイル(create.blade.php)を表示。
その際に、Route [step.store] not defined.のエラーが発生。
step.storeは、create.blade.php内でformに組み込んだルートの名称。
つまり、step.storeのルート定義が「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