Маршрут Laravel идет на другую страницу вместо правильной

Идет по другому маршруту

Route::group(['middleware' => 'auth'], function(){
    Route::get('/employees', [App\Http\Controllers\AngajatiController::class, 'show'])->name('employees');
    Route::get('/show-form', [App\Http\Controllers\AngajatiController::class, 'show_form'])->name('show-form');
    Route::post('/show-form', [App\Http\Controllers\AngajatiController::class, 'add_employee'])->name('add-employee');
    Route::post('/delete-employee', [App\Http\Controllers\AngajatiController::class, 'delete_employee'])->name('delete-employee');
    Route::get('/{slug}', [App\Http\Controllers\AngajatiController::class, 'see_employee'])->name('see-employee');
    Route::put('/{slug}', [App\Http\Controllers\AngajatiController::class, 'update_employee'])->name('update-employee');
    Route::post('/search-employee', [App\Http\Controllers\SearchController::class, 'search_employee'])->name('search-employee');
});

Route::get('/generate-pdf', [App\Http\Controllers\GeneratePDF::class, 'show_pdf'])->name('generate-pdf');

Это generatepdf.php

public function show_pdf(Request $request){
    return view('tAngajati.genereaza-pdf');
}

У меня есть таблица сотрудников, где у меня есть кнопка «Просмотр» рядом с кнопкой «Создать PDF». Когда я нажимаю кнопку «Просмотр», он переходит на маршрут SLUG в (see-employees.blade.php). Когда я нажимаю «Создать PDF», у меня есть отдельный контроллер и отдельная функция (я вернул вид tAngajati.genereaza-pdf), но проблема в том, что он не идет к genereaza-pdf.blade.php, он идет к see-employees.blade.php и выдает ошибку, что я не определил некоторые значения (по данным сотрудника).

поместите объявление маршрута generate-pdf над кратким. Или лучшим решением было бы изменить слаг на employee/{slug}, поэтому маршруты, которые перехватываются этим маршрутом, должны иметь префикс employee

N69S 23.04.2023 20:54

У вас будет такая же проблема с маршрутом search-employee, потому что search-employee также может соответствовать {slug}

apokryfos 23.04.2023 20:57

Используйте маршруты REST и забудьте об этих проблемах с маршрутами. Удалить /employees/{id}; ПОЛУЧИТЬ /сотрудников/{id}; СТАВИТЬ, ПАТЧАТЬ для одних и тех же маршрутов. POST /employees означает создать новый

marius-ciclistu 23.04.2023 22:03

Спасибо вам, ребята. задача решена. я только что сделал другие маршруты, как сказал @N69S.

jerryRigEverything 24.04.2023 09:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам следует изменить способ структурирования маршрутов, чтобы они соответствовали более стандартизированному подходу. Это предотвратит повторные неприятности, так как это распространенная проблема.

Дело в том, что у вас есть:

Route::get('/{slug}', [App\Http\Controllers\AngajatiController::class, 'see_employee'])->name('see-employee');

и

Route::get('/generate-pdf', [App\Http\Controllers\GeneratePDF::class, 'show_pdf'])->name('generate-pdf');

И Laravel рассматривает «генерировать-pdf» как еще один слаг и поэтому перенаправляет его на указанный вами маршрут.

Быстрым и грязным решением было бы изменить способ определения вашего маршрута generate-pdf, например:

Route::get('/pdf/generate', [App\Http\Controllers\GeneratePDF::class, 'show_pdf'])->name('generate-pdf');

Поскольку он будет иметь два сегмента (pdf и генерировать), в отличие от других маршрутов, он будет работать нормально. Но я бы порекомендовал вам изменить структуру всех ваших маршрутов, как указано здесь, например, чтобы вы следовали общепринятым передовым методам.

Другие вопросы по теме