web.php
Route::group(['prefix' => 'test'], function() {
Route::get('/','TestController@index');
});
こんな感じでtest
にアクセスし、indexアクションの処理をさせようとしたら、
Target class [TestController] does not exist
というエラーが発生したのでスペルミスなどを疑ってみましたが Laravel8では少し違う様です。
英語は苦手なので解釈を間違えていたらすみません。
エラーの原因
RouteServiceProvider.php
Route::middleware('web')
->group(base_path('routes/web.php'));
Laravel8ではこんな感じでApp\Providers\RouteServiceProvider.php
の中にある$namespace
変数が削除されて宣言方法が変わった様なことを言ってる気がする。
解決方法は
RouteServiceProvider.php
protected $namespace = 'App\Http\Controllers';
//boot()の上で定義されている変数にこれを追加する
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::middleware('web')
->namespace($this->namespace)//この行を追加
->group(base_path('routes/web.php'));
});
}
上記を追加してtest
にアクセスするとしっかりとアクションの処理を呼び出せていました。
他の方法として
web.php
Route::get('path','App\Http\Controllers\YourController@index');
こんな感じで強引に書くのもありみたい。
他にも
web.php
use App\Http\Controllers\YourController;
Route::get('path', 'YourController@all');
Route::get('path', [YourController::class, 'all']);
こんな書き方もあるみたい。
コントローラーが少ない時は最後の3つでいいかもしれないけど規模が大きいとProvider.php
いじった方がいいのかも。