Не могу отправить форму методом 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 шт):

Автор решения: abu
  1. Метод указывается не скрытым параметром, а методом формы. В Вашем случае

<form action="{{ url('profile.oauth.detach', {network: network.network, identity: network.identity}) }}" method="delete" onsubmit="return confirm('Are you sure?')">

У Вас передается методом POST, который для данного роута не зарегистрирован

  1. Обычно данные формы передаются методами GET и PUT. DELETE и PUT больше подходят для API

В данном случае лучше либо отрабатывать аяксом по данным формы методом DELETE, либо отправлять форму как есть (методом POST, с указанием метода параметром). Но тогда В роуте заменить DELETE на POST и обрабатывть _method как поле формы

→ Ссылка
Автор решения: Max

Чтобы маршрутизатор распознавал указанный в скрытом поле метод и обрабатывал отправку формы через PUT/PATCH/DELETE запрос, необходимо в /config/packages/framework.yaml включить данную опцию.

    framework:
        .....
        http_method_override: true
→ Ссылка