Laravel: Route :: resource () GET & amp; POST работает, но PUT & amp; DELETE throw MethodNotAllowedHttpException

Я пишу API веб-сервиса (в laravel 4.2).
По какой-то причине маршрутизация на один из моих контроллеров выборочно завершается с ошибкой на основе метода HTTP.

Мой route.php выглядит так:

Route::group(array('prefix' => 'v2'),
function()
{
Route::resource('foo', 'FooController',
[ 'except' => ['edit', 'create'] ]
);
Route::resource('foo.bar', 'FooBarController',
[ 'except' => ['show', 'edit', 'create'] ]
);
}
);

Поэтому, когда я пытаюсь использовать любой из методов GET / POST / PUT / PATCH / DELETE для
project.dev/v2/foo или же project.dev/v2/foo/1234 URL-адреса, все работает отлично.

Но по какой-то причине только GET и POST работают на project.dev/v2/foo/1234/bar, Другие методы просто выдают 405 (MethodNotAllowedHttpException).
(Кстати, я выдаю запросы через Расширенный Отдых Клиента Расширение Chrome.)

В чем дело?
Что мне не хватает?

11

Решение

Решено!
Ответ можно найти, запустив php artisan routes,

Это показало мне, что DELETE и PUT / PATCH ожидают (требуют) идентификатор бара.
Я случайно пренебрегал этим, потому что может быть только один из этого типа «бара». Легко исправить это, просто добавив его в мой URL независимо от того, как project.dev/v2/foo/1234/bar/5678,

18

Другие решения

Для тех, кто использует версии Laravel> 4.2, используйте это:

php artisan route:list

Это даст список маршрутов, установленных в вашем приложении. Проверьте, разрешены ли маршруты для PUT и DELETE в ваших маршрутах или нет.
Ошибка 405 в основном из-за отсутствия маршрута для этих методов.

6

Я не знаю о старых версиях Laravel. Но я использую Laravel начиная с 5.2, и необходимо использовать скрытый метод ввода при использовании put, patch или delete.

Пример:

<input type="hidden" name="_method" value="PUT">

Проверьте https://laravel.com/docs/5.6/routing#form-method-spoofing

0
По вопросам рекламы [email protected]