Skip to content

Suplantación de Métodos de Formulario ​

A veces es necesario definir manualmente qué verbo HTTP debe enviar un formulario. Los formularios HTML solo permiten GET o POST, por lo que si desea cualquier otro tipo de verbo, deberá especificarlo usted mismo.

Verbos HTTP en Laravel ​

Como ya hemos visto, puedes definir qué verbos coincidirán con una ruta en la definición de ruta usando Route::get(), Route::post(), Route::any() o Route::match(). También puedes hacer coincidir con Route::patch(), Route::put() y Route::delete().

Pero, ¿cómo se envía una solicitud que no sea GET con un navegador web? En primer lugar, el atributo de método en un formulario HTML determina su verbo HTTP: si su formulario tiene un método "GET", se enviará a través de parámetros de consulta y un método GET; si el formulario tiene un método "POST", se enviará a través del cuerpo de la publicación y un método POST.

Los frameworks de JavaScript facilitan el envío de otras solicitudes, como DELETE y PATCH. Pero si necesitas enviar formularios HTML en Laravel con verbos distintos a GET o POST, tendrás que usar la suplantación de métodos de formulario, lo que significa suplantar el método HTTP en un formulario HTML.

Suplantación de Métodos HTTP en Formularios HTML ​

Para informar a Laravel que el formulario que estás enviando actualmente debe tratarse como algo distinto a un POST, agrega una variable oculta llamada _method con el valor "PUT", "PATCH" o "DELETE", y Laravel coincidirá y enrutará ese envío de formulario como si en realidad fuera una solicitud con ese verbo.

Suplantación de métodos de formulario

html
<form action="/tasks/5" method="POST">
    <input type="hidden" name="_method" value="DELETE">
    <!-- or: -->
    @method('DELETE')
</form>