Как управлять маршрутами в блейде, когда есть одинаковые маршруты внутри двух разных групп маршрутов?

#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