Не могу отправить форму методом DELETE в Symfony 6.1
Есть форма
<form
action="{{ url('profile.oauth.detach', {network: network.network, identity: network.identity}) }}"
method="post"
onsubmit="return confirm('Are you sure?')"
>
<input type="hidden" name="_method" value="DELETE" />
<input type="hidden" name="token" value="{{ csrf_token('delete') }}">
<button class="btn btn-sm btn-danger text-white" type="submit"><i class="cil-trash"></i></button>
</form>
В контроллере настраиваю роут:
/**
* @Route(path="/detach/{network}/{identity}", name="profile.oauth.detach", methods={"DELETE"})
*/
Но при клике на кнопку удалить получаю ошибку:
No route found for "POST http://192.168.99.102:8080/profile/oauth/detach/github/105369217": Method Not Allowed (Allow: DELETE)
Никак не могу понять, почему я получаю её. В документации написано, что нужно настроить поле _method со значением DELETE, я это сделал, но ошибка не пропадает.
Ответы (2 шт):
- Метод указывается не скрытым параметром, а методом формы. В Вашем случае
<form action="{{ url('profile.oauth.detach', {network: network.network, identity: network.identity}) }}" method="delete" onsubmit="return confirm('Are you sure?')">
У Вас передается методом POST, который для данного роута не зарегистрирован
- Обычно данные формы передаются методами GET и PUT. DELETE и PUT больше подходят для API
В данном случае лучше либо отрабатывать аяксом по данным формы методом DELETE, либо отправлять форму как есть (методом POST, с указанием метода параметром). Но тогда В роуте заменить DELETE на POST и обрабатывть _method как поле формы
Чтобы маршрутизатор распознавал указанный в скрытом поле метод и обрабатывал отправку формы через PUT/PATCH/DELETE запрос, необходимо в /config/packages/framework.yaml включить данную опцию.
framework:
.....
http_method_override: true