#php #laravel #routes #router
#php #laravel #маршруты #маршрутизатор
Вопрос:
Я создал два контроллера ресурсов внутри двух разных групп маршрутов. Один для пользователя Один для администратора
Route::group([
'prefix' => 'dashboard',
"middleware" => 'auth',
"namespace" => 'User'
], function (){
Route::resource('projects', 'ProjectController');
})
Route::group([
'prefix' => 'admin',
"middleware" => 'auth',
"namespace" => 'Admin'
], function (){
Route::resource('projects', 'ProjectController');
})
Я использую ключевое слово ‘route’ для назначения маршрутов. Я делаю это потому, что хотел использовать одни и те же файлы представлений для обоих.
Вот файл с лезвием
<form action='{{route('projects.update', $project)}}' method="POST">
@method('PUT')
@csrf
....
</form>
Когда я нахожусь в /admin/projects, он использует маршруты ресурсов admin.projects, как и ожидалось, но когда я в /dashboard/ projects, он должен использовать маршрут ресурсов dashboard, но он использует маршрут admin.projects.update.
А также, когда я комментирую / удаляю маршруты проектов администратора из web.php , все работает нормально.
Дайте мне знать, почему это происходит. И каково наилучшее решение для этого.
Ответ №1:
Запустите эту команду php artisan route:list
, и вы найдете одно и то же имя псевдонима в обоих, поэтому вам нужно сделать псевдоним уникальным.
Для этого,
Route::group([
'prefix' => 'dashboard',
'as' => 'dashboard.',
"middleware" => 'auth',
"namespace" => 'User'
], function (){
Route::resource('projects', 'ProjectController');
});
Route::group([
'prefix' => 'admin',
'as' => 'admin.',
"middleware" => 'auth',
"namespace" => 'Admin'
], function (){
Route::resource('projects', 'ProjectController');
});
Поэтому вам нужно использовать это как admin.projects.index
и dashboard.projects.index