#laravel #laravel-routing
Вопрос:
Я довольно смущен тем, как работает МАРШРУТ в этих случаях.
Я определил такую комбинацию маршрутов:
Route::apiResource('users', 'UserController');
Route::get('users/{user}/tasks', 'UserController@tasks');
И все в порядке. Никаких проблем.
Но
Я сделал то же самое для другой модели:
Route::apiResource('tasks', 'TaskController');
Route::get('tasks/calendar', 'TaskController@calendar');
И для этой комбинации я получил исключение NotFoundHttpException :/
{
"message": "No query results for model [App\Models\Task] calendar",
"exception": "Symfony\Component\HttpKernel\Exception\NotFoundHttpException", ...
Если я изменю URI, например, «задача/календарь», то это сработает.
Чего мне не хватает?
Спасибо за помощь.
Ответ №1:
То
Route::get('tasks/calendar', 'TaskController@calendar');
должно быть перемещено выше:
Route::apiResource('tasks', 'TaskController');
для работы, потому apiResource
что отображает tasks/{task}
маршрут, который совпадает, до того, как он достигнет tasks/calendar
маршрута.
Заказ не вызывает проблем у пользователей.:
Route::get('users/{user}/tasks', 'UserController@tasks');
потому что у него есть дополнительный сегмент url ( /tasks
), который предотвращает его столкновение users/{user}
.
Проверьте свои текущие маршруты с помощью php artisan route:list
.