methodpathput

Métodos PUT, PATCH y DELETE en nuestros Formularios

Estos métodos se conocen como “verbos”, entre algunos de ellos tenemos: GET, POST, PUT, PATCH y DELETE. La mayoría de los navegadores dan sólo soporte a GET y POST. En este articulo conoceremos un poco como hacer este tipo de peticiones a tráves de formularios.

Métodos PUT, PATCH y DELETE en nuestros Formularios

En Laravel y en varios frameworks los podemos encontrar cuando trabajamos con RESTful. Hace tiempo que se hizo la relación de CRUD con REST, haciendo que los verbos correspondan a las acciones en REST. Particularmente me paso que cuando conocí estos métodos intente probarlos haciendo algo como esto dentro de uno de mis formularios: <form action="{{ route('form.put') }}" method="DELETE">  y demore algo de tiempo para darme cuenta que lo que acababa de hacer estaba malo. Pero antes de decir porque creo que es recomendable un poco de teoría.

Verbos HTTP

Estos verbos realizan las siguientes acciones:

GET: recupera recursos.
POST: crea un recurso.
PUT/PATCH: modifica un recurso.
DELETE: elimina un recurso.

Si lees la especificación HTTP/1.1 podrás ver que de igual forma cada verbo tiene un fin muy similar. Por ejemplo dice que PUT aparte de modificar un recurso, puede ser utilizado para crear uno. En la red hay mucha información donde puedes encontrar ejemplos y casos de usos para cada uno de los verbos HTTP, lo cual te recomiendo que investigues y te enteres cuando utilizar cada uno, sobretodo por la popularización de las interfaces REST, mas no nos centraremos en este articulo sobre esto,  sino como enviar este tipo de peticiones en un formulario dentro de una aplicación en Laravel.

¿Como trabajar con estos verbos?

Los navegadores en su mayoría, hasta ahora no dan soporte para PUT y DELETE, ¿cómo trabajamos con ellos?. Los emulamos. Para hacer esto, Laravel utiliza un campo oculto llamado _method. Entonces, enviamos un formulario utilizando POST pero si en _method indicamos PUT, Laravel tratará la consulta como PUT yendo al método RESTful correspondiente y editará el recurso. Esa “habilidad” viene desde Symfony:

Symfony\Component\HttpFoundation\Request.php –  líneas 688 a 691 (al momento de escribir este articulo):

Ya en Laravel, activa esa propiedad en Kernel de Illuminate/Foundation.

Para hacer esto antes mencionado, colocamos el siguiente ejemplo:

De esta manera, nuestro formulario enviara una petición del tipo PUT al servidor, que va ser procesada por la ruta del mismo tipo.

Helper de Laravel

También contamos con un Helper que haría la misma funcion de enviar en un campo oculto el método:

Laravel Collective

Por otro lado si estas utilizando Laravel Collective no es necesario el campo oculto, sino directamente en la declaración del formulario puedes indicarle el método y la herramienta se encargara del resto.

Peticiones Ajax

Si procesas tu formulario via AJAX. Normalmente los scripts que hacen este tipo de peticiones ya soportan los envios de metodos HTTP. Por ejemplo en Jquery:

O si estas un poco mas avanzados y utilizas Axios:

O con alguno de los alias: axios.delete(url[, config]) .

Si necesitas mas información, puedes investigar un poco mas sobre el protocolo HTTP. Recuerda que si tienes alguna duda o recomendación puedes dejarlo en nuestros comentarios, o unirte a nuestro Slack de Laravel en español, puedes conseguir tu invitación a través del siguiente enlace.

Nos vemos en los próximos artículos.

Sergio Ojeda

Venezolano. Ingeniero Electrónico dedicado a la Programación Web. Amante de las buenas prácticas y el código limpio. SCRUM Lover. Aprendiz eterno.