EGO-LOG

40代2児の父。主にプログラム学習と開発、仮想通貨、メタバース、たまに関係ないことを綴る。

(2022/3/20)Laravel環境 7日目

まだControllerのルーティングで詰まっており。

 

Bookコントローラをルーティングする場合、

web.php

Route::resource('book', 'BookController');

と記述すると、

Illuminate\Contracts\Container\BindingResolutionException

Target class [BookController] does not exist.

 

なんやかんやで、↓の記述にすると、

Route::get('/book', [BookController::class, 'index']);

indexは通るが、editが通らない。

'edit'を記述すると、上書きされている感じ。

 

LaravelでRoute::resourceを使うときに気をつけること - Qiita

↑から、ルーティングを限定する記述

Route::resource('book', 'BookController', ['only' => ['index', 'edit'] ]);

しても変わらず。

 

適当に組み合わせて

Route::get('/book', [BookController::class, ['only' => ['index', 'edit'] ] ]);

などとしても、

Function () does not eixist

となり、悶絶。

 

【Laravel】エラーの原因と対処法:Target class [○○Controller] does not exist(Illuminate\Contracts\Container\BindingResolutionException)

もがいていきます。

今回インストールしたのはLaravel8

Laravel7までは、ルーティングを記述する routes/web.phpファイルにデフォルトの状態でコントローラの名前空間(App\\Http\\Controllers)が適用されていたのですが、Laravel8でこのデフォルトの設定が外れたためです。

とある。ファイル上部で

use App\Http\Controllers\BookController;

を記述してもダメだったが、

Route::resource('book', 'App\Http\Controllers\BookController');

とresource関数呼び出し時に完全なクラスパスを指定したら通った!

 

長かった。。。

Laravel入門 - 使い方チュートリアル - - Qiita

ずっと参考にしてるサイト、ようやく先に進めます。