Laravel: Route:: resource() GET & POST работает, но PUT & DELETE throw MethodNotAllowedHttpException
Я пишу API webservice (в laravel 4.2).
По какой-то причине маршрутизация на один из моих контроллеров выборочно терпит неудачу на основе метода HTTP.
Мои маршруты .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
, все работает отлично.
Но по какой-то причине только GET и POST работают для project.dev/v2/foo/1234/bar
. Другие методы просто кидают 405 (MethodNotAllowedHttpException).
(fyi, я отправляю запросы через расширение расширенного клиента клиента Rest Rest.)
Что происходит?
Что мне не хватает?
Ответы
Ответ 1
Решено!
Ответ можно найти, запустив php artisan routes
.
Это показало мне, что DELETE и PUT/PATCH ожидают (требуют) идентификатора панели.
Мне было пренебречь этим, потому что может быть только один из этого конкретного типа "бар". Легко исправить это, просто добавив его к моему URL независимо, например project.dev/v2/foo/1234/bar/5678
.
Ответ 2
Для тех, кто использует версии Laravel> 4.2, используйте это:
php artisan route:list
Это даст список маршрутов, установленных в вашем приложении. Проверьте, разрешены ли маршруты для PUT и DELETE в ваших маршрутах или нет. Ошибка 405 в основном из-за отсутствия маршрута для этих методов.
Ответ 3
Я не знаю о старых версиях Laravel. Но я использую Laravel начиная с 5.2, и необходимо использовать скрытый метод ввода при использовании put, patch или delete.
Пример:
<input type="hidden" name="_method" value="PUT">
Проверьте https://laravel.com/docs/5.6/routing#form-method-spoofing
Ответ 4
Просто добавьте скрытое поле ввода в вашу форму
<input type="hidden" name="_method" value="PUT">
И сохраните метод формы как пост
<form method="post" action="{{action('')}}">