Я использую vue.js и Laravel 5.1 для создания небольшого приложения для совместного использования файлов.
Все работает отлично, но теперь я хотел убедиться, что владелец каждого файла может удалить пользователей из своего файла (сначала он должен был совместно использовать файл с этими пользователями), поэтому я делаю запрос PUT на URL с именем /files/share
.
Мой маршрут Laravel выглядит так:
Route::put('/files/share', 'FileController@test');
Когда я запускаю php artisan route:list
попадает в список.
Код на стороне клиента выглядит следующим образом:
this.$http.put('/files/share', { some_data }, function(data) { if(data.error){ this.$set('error', data.error); } else { this.$set('file', data); } });
Точная ошибка, которую я получаю, такова:
2/2 NotFoundHttpException in Handler.php line 46: No query results for model [App\File]. 1/2 ModelNotFoundException in Builder.php line 129: No query results for model [App\File].
Но приложение даже не доходит до контроллера, если я просто что-то возвращаю, ошибка там же.
С маршрутами Laravel порядок имеет значение. Маршруты с динамическими сегментами, такими как files/{file}
или маршруты ресурсов, всегда должны определяться после статических. В противном случае Laravel будет интерпретировать часть вашего URL как идентификатор.
Итак, как вы сами поняли, вам просто нужно изменить порядок ваших маршрутов:
Route::put('/files/share', 'FileController@test'); Route::resource('/files', 'FileController');
Благодаря lukasgeiter я снова проверил маршруты и должен был определить маршрут / files / share до моего маршрута ресурса RESTful.