Laravelの学習をしていて、参考資料や動画を見てそのままコードを入力すると以下のようなエラーがでたので備忘録として書きます。
Laravel8でnot exist.エラー
私の環境は、現段階では最新のLaravelバージョン8を使用して、学習しているのですがLaravel8の場合はRouteServiceProvider.phpファイルからデフォルトの名前空間を削除されているらしい。
なので参考資料などの通りルーティング設定で
Route::get('hello','HelloController@index');
と書いてしまうと以下のようなエラーが出ると思います。
コントローラーが存在しません??? なぜ?
原因は、Laravel8ではweb.phpに以下のように完全な名前空間で記載する必要があるみたいです。
Route::get('hello','App\Http\Controllers\HelloController@index');
Larabel8を使って学習している人は、はまると思うので注意しましょう!私も30分ぐらいはまりました。。。
以前のLaravelバージョンと同様に使用したい場合
また、以前のバージョンと同様にコントローラー名@アクション名だけを書きたい場合は、app\Providers\RouteServiceProvider.phpに以下を追加したらこれまで通りで利用可能みたいです。
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
protected $namespace = 'App\http\Controllers'; /** この行を追加
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
});
}
コメント