سلام، وقتی من یک کنترلر در لاراول با دستور php artisan make:controller PostController ایجاد می کنم با خطای زیر رو به رو می شوم. لطفا راهنمایی کنید که چطور این خطا را برطرف کنم؟
Target class [PostController] does not exist.
سلام، شما از لاراول ۸ استفاده می کنید و باید دقت داشته باشید که در این نسخه namespace ها و پسوندهای آنها به صورت پیشفرض تعریف نشده اند و دلیل خطای شما هم همین موضوع است. در نسخه های قبلی در RouteServiceProvider یک متغییر به نام namespace وجود داشت که به صورت خودکار پس از نصب لاراول مسیردهی کنترلرها و Route ها را انجام میداد و این اتفاق در نسخه ۸ به بعد رخ نمی دهد. پس برای حل این مشکل چندین راه حل وجود دارد:
۱) تعریف namespace در RouteServiceProvider (پشنهاد من)
ابتدا به مسیر App\Providers\RouteServiceProvider رفته و سپس خط زیر را تابع boot اضافه کنید:
//ابتدا خط زیر را در این فایل از حالت کامنت خارج کنید
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'));
});
}
این کار را می توانید برای تک به تک مسیردهی ها (مثلا web یا api انجام دهید)
۲) افزودن namespace به فایل route لاراول
به هنگام تعریف یک مسیر در فایل های web.php یا api.php و ... می توانید مسیر کنترلرها را مشخص کنید:
use App\Http\Controllers\UserController; // این خط مسیر کنترلر را مشخص می کند
Route::get('/users', [UserController::class, 'index']);
// or
Route::get('/users', 'App\Http\Controllers\UserController@index');
به جمع هزاران کاربر اینستاگرامی روکسو بپیوندید.