#php #laravel #routes #laravel-8
#php #laravel #маршруты #laravel-8
Вопрос:
У меня есть контроллер ресурсов, который есть ArticleController
, и я хочу вызвать этот контроллер web.php
, поэтому я закодировал:
use AppHttpControllersAdminPanelController;
use AppHttpControllersAdminArticleController;
Route::namespace('Admin')->prefix('admin')->group(function(){
Route::get('/admin/panel', [PanelController::class, 'index']);
Route::resource('articles', [ArticleController::class]);
});
Затем я попробовал команду php artisan route:list
для проверки маршрутов, но я получаю это сообщение об ошибке:
Исключение ErrorException
Преобразование массива в строку
Итак, почему возникает эта ошибка, как я могу ее исправить?
Ответ №1:
Route::resource
ожидает строку для второго аргумента, а не массив.
Route::resource('articles', ArticleController::class);
Удалите вызов namespace
для группы, вам не нужен префикс пространства имен, потому что вы используете полное имя класса, FQCN , для ссылки на контроллеры.
Route::prefix('admin')->group(function () {
Route::get('/admin/panel', [PanelController::class, 'index']);
Route::resource('articles', ArticleController::class);
});
Комментарии:
1. Я удалил массив вокруг контроллера, но теперь он говорит:
Target class [AdminAppHttpControllersAdminArticleController] does not exist.
2. Потому что вы добавляете пространство имен перед любым контроллером, определяемым в файле маршрута. Вы можете проверить пространство имен в RouteServiceProvider или группу маршрутов, которые вы определили
3. @ruwroveajaic , недавно у меня была такая же проблема, это можно исправить, поместив весь путь к классу в строку, например
Route::resource('articles', 'AppHttpControllersArticleController');
, предполагая, что ваш контроллер находится в аналогичном пути, поэтому вы соответствующим образом меняете путь.
Ответ №2:
Это происходит потому, что вы сохранили ArticleController в квадратных скобках. Снимите квадратную скобку и оставьте ее такой:
use AppHttpControllersAdminPanelController;
use AppHttpControllersAdminArticleController;
Route::namespace('Admin')->prefix('admin')->group(function(){
Route::get('/admin/panel', [PanelController::class, 'index']);
Route::resource('articles', ArticleController::class);
});
Или
use AppHttpControllersAdminPanelController;
Route::namespace('Admin')->prefix('admin')->group(function(){
Route::get('/admin/panel', [PanelController::class, 'index']);
Route::resource('articles', 'AppHttpControllersAdminArticleController');
});
Метод resource ожидает ссылку на класс контроллера в качестве второго параметра, но вы дали ему массив.
Примечание. если вы используете первый фрагмент, убедитесь, что класс импортирован правильно.Иначе вы столкнетесь с другой ошибкой.