Ви використовуєте Laravel 8. У новій інсталяції Laravel 8 префікс простору імен не застосовується до ваших груп маршрутів, в які завантажуються ваші маршрути.
"У попередніх випусках Laravel, що RouteServiceProvider
містило $namespace
властивість. Значення цієї властивості буде автоматично додано до префіксу до визначень маршруту контролера та викликів action
помічника / URL::action
методу. У Laravel 8.x ця властивість є null
за замовчуванням. Це означає, що немає автоматичної префікса простору імен зробить Laravel ". Документи Laravel 8.x - Примітки до випуску
Вам потрібно було б використовувати повне ім’я класу для своїх контролерів, коли вони посилаються на них у своїх маршрутах, коли не використовують префікс простору імен.
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);
Route::get('/users', 'App\Http\Controllers\UserController@index');
Якщо ви віддаєте перевагу старому способу:
App\Providers\RouteServiceProvider
:
public function boot()
{
...
Route::prefix('api')
->middleware('api')
->namespace('App\Http\Controllers')
->group(base_path('routes/api.php'));
...
}
Зробіть це для будь-яких груп маршрутів, для яких потрібно оголошений простір імен.
$namespace
властивість:
Хоча в примітках до випуску є згадка про $namespace
властивість, яку потрібно встановити для вас, RouteServiceProvider
і коментувати у вашій, RouteServiceProvider
це не впливає на ваші маршрути. Наразі це лише для додавання префіксу простору імен для генерації URL-адрес до дій. Отже, ви можете встановити цю змінну, але вона сама по собі не додаватиме цих префіксів простору імен, вам все одно доведеться переконатися, що будете використовувати цю змінну при додаванні простору імен до груп маршрутів.
Ця інформація зараз знаходиться в Посібнику з оновлення
Документи Laravel 8.x - Посібник з оновлення - Маршрутизація
Те, що показує Посібник з оновлення, є важливою частиною того, що ви визначаєте простір імен для своїх груп маршрутів. Встановлення $namespace
змінної само по собі допомагає лише у формуванні URL-адрес для дій.
Знову ж таки, і я не можу наголосити на цьому досить важливо, важливою частиною є встановлення простору імен для груп маршрутів, що вони просто роблять, посилаючись на змінну-член $namespace
безпосередньо у прикладі.
Оновлення:
Якщо ви встановили нову копію Laravel 8, починаючи з версії 8.0.2, laravel/laravel
ви можете прокоментувати protected $namespace
змінну-член у, RouteServiceProvider
щоб повернутися до старої версії , оскільки групи маршрутів налаштовані на використання цієї змінної-члена для простору імен для груп.
Тільки причина Розкоментувати щоб додати префікс простору імен для контролерів , призначених маршрутів , тому що групи маршрутизації налаштовані використовувати цю змінну в якості простору імен:
...
->namespace($this->namespace)
...
Api
папки.?