Formularios
La última versión de Laravel no incluye ninguna utilidad para la generación de formularios. En esta sección vamos a repasar brevemente como crear un formulario usando etiquetas de HTML, los distintos elementos o inputs que podemos utilizar, además también veremos como conectar el envío de un formulario con un controlador, como protegernos de ataques CSRF y algunas cuestiones más.
Crear formularios
Para abrir y cerrar un formulario que apunte a la URL actual y utilice el método POST tenemos que usar las siguientes etiquetas HTML:
Si queremos cambiar la URL de envío de datos podemos utilizar el atributo action
de la forma:
La función url
generará la dirección a la ruta indicada. Ademas también podemos usar la función action
para indicar directamente el método de un controlador a utilizar, por ejemplo: action('HomeController@getIndex')
Como hemos visto anteriormente, en Laravel podemos definir distintas acciones para procesar peticiones realizadas a una misma ruta pero usando un método distinto (GET, POST, PUT, DELETE). Por ejemplo, podemos definir la ruta "user
" de tipo GET
para que nos devuelva la página con el formulario para crear un usuario, y por otro lado definir la ruta "user
" de tipo POST
para procesar el envío del formulario. De esta forma cada ruta apuntará a un método distinto de un controlador y nos facilitará la separación del código.
HTML solo permite el uso de formularios de tipo GET o POST. Si queremos enviar un formulario usando otros de los métodos (o verbos) definidos en el protocolo REST, como son PUT, PATCH o DELETE, tendremos que añadir un campo oculto para indicarlo. Laravel establece el uso del nombre "_method
" para indicar el método a usar, por ejemplo:
Laravel se encargará de recoger el valor de dicho campo y de procesarlo como una petición tipo PUT (o la que indiquemos). Además, para facilitar más la definición de este tipo de formularios ha añadido la función method_field
que directamente creará este campo oculto:
Protección contra CSRF
El CSRF (del inglés Cross-site request forgery o falsificación de petición en sitios cruzados) es un tipo de exploit malicioso de un sitio web en el que comandos no autorizados son transmitidos por un usuario en el cual el sitio web confía.
Laravel proporciona una forma fácil de protegernos de este tipo de ataques. Simplemente tendremos que llamar al método csrf_field
después de abrir el formulario, igual que vimos en la sección anterior, este método añadirá un campo oculto ya configurado con los valores necesarios. A continuación se incluye un ejemplo de uso:
Elementos de un formulario
A continuación vamos a ver los diferentes elementos que podemos añadir a un formulario. En todos los tipos de campos en los que tengamos que recoger datos es importante añadir sus atributos name
e id
, ya que nos servirán después para recoger los valores rellenados por el usuario.
Campos de texto
Para crear un campo de texto usamos la etiqueta de HTML input
, para la cual tenemos que indicar el tipo text
y su nombre e identificador de la forma:
En este ejemplo hemos creado un campo de texto vacío cuyo nombre e identificador es "nombre". El atributo name
indica el nombre de variable donde se guardará el texto introducido por el usuario y que después utilizaremos desde el controlador para acceder al valor.
Si queremos podemos especificar un valor por defecto usando el atributo value
:
Desde una vista con Blade podemos asignar el contenido de una variable (en el ejemplo $nombre
) para que aparezca el campo de texto con dicho valor. Esta opción es muy útil para crear formularios en los que tenemos que editar un contenido ya existente, como por ejemplo editar los datos de usuario. A continuación se muestra un ejemplo:
Para mostrar los valores introducidos en una petición anterior podemos usar el método old
, el cual recuperará las variables almacenadas en la petición anterior. Por ejemplo, imaginad que creáis un formulario para el registro de usuarios y al enviar el formulario comprobáis que el usuario introducido está repetido. En ese caso se tendría que volver a mostrar el formulario con los datos introducidos y marcar dicho campo como erróneo. Para esto, después de comprobar que hay un error en el controlador, habría que realizar una redirección a la página anterior añadiendo la entrada como ya vimos con withInput()
, por ejemplo: return back()->withInput();
. El método withInput()
añade todas las variables de entrada a la sesión, y esto nos permite recuperarlas después de la forma:
Más adelante, cuando veamos como recoger los datos de entrada revisaremos el proceso completo para procesar un formulario.
Más campos tipo input
Utilizando la etiqueta input
podemos crear más tipos de campos como contraseñas o campos ocultos:
Los campos para contraseñas lo único que hacen es ocultar las letras escritas. Los campos ocultos se suelen utilizar para almacenar opciones o valores que se desean enviar junto con los datos del formulario pero que no se tienen que mostrar al usuario. En las secciones anteriores ya hemos visto que Laravel lo utiliza internamente para almacenar un hash o código para la protección contra ataques tipo CSRF y que también lo utiliza para indicar si el tipo de envío del formulario es distinto de POST o GET. Además nosotros lo podemos utilizar para almacenar cualquier valor que después queramos recoger justo con los datos del formulario.
También podemos crear otro tipo de inputs como email, number, tel, etc. (podéis consultar la lista de tipos permitidos aquí: http://www.w3schools.com/html/html_form_input_types.asp). Para definir estos campos se hace exactamente igual que para un campo de texto pero cambiando el tipo por el deseado, por ejemplo:
Textarea
Para crear un área de texto simplemente tenemos que usar la etiqueta HTML textarea
de la forma:
Esta etiqueta además permite indicar el número de filas (rows
) y columnas (cols
) del área de texto. Para insertar un texto o valor inicial lo tenemos que poner entre la etiqueta de apertura y la de cierre. A continuación se puede ver un ejemplo completo:
Etiquetas
Las etiquetas nos permiten poner un texto asociado a un campo de un formulario para indicar el tipo de contenido que se espera en dicho campo. Por ejemplo añadir el texto "Nombre" antes de un input tipo texto donde el usuario tendrá que escribir su nombre.
Para crear una etiqueta tenemos que usar el tag "label
" de HTML:
Donde el atributo for
se utiliza para especificar el identificador del campo relacionado con la etiqueta. De esta forma, al pulsar sobre la etiqueta se marcará automáticamente el campo relacionado. A continuación se muestra un ejemplo completo:
Checkbox y Radio buttons
Para crear campos tipo checkbox o tipo radio button tenemos que utilizar también la etiqueta input
, pero indicando el tipo chekbox
o radio
respectivamente. Por ejemplo, para crear un checkbox para aceptar los términos escribiríamos:
En este caso, al enviar el formulario, si el usuario marca la casilla nos llegaría la variable con nombre terms
con valor 1
. En caso de que no marque la casilla no llegaría nada, ni siquiera la variable vacía.
Para crear una lista de checkbox o de radio button es importante que todos tengan el mismo nombre (para la propiedad name
). De esta forma los valores devueltos estarán agrupados en esa variable, y además, el radio button funcionará correctamente: al apretar sobre una opción se desmarcará la que este seleccionada en dicho grupo (entre todos los que tengan el mismo nombre). Por ejemplo:
Además podemos añadir el atributo checked
para marcar una opción por defecto:
Ficheros
Para generar un campo para subir ficheros utilizamos también la etiqueta input indicando en su tipo el valor file
, por ejemplo:
Para enviar ficheros la etiqueta de apertura del formulario tiene que cumplir dos requisitos importantes:
El método de envío tiene que ser POST o PUT.
Tenemos que añadir el atributo enctype="multipart/form-data" para indicar la codificacón.
A continuación se incluye un ejemplo completo:
Listas desplegables
Para crear una lista desplegable utilizamos la etiqueta HTML select
. Las opciones la indicaremos entre la etiqueta de apertura y cierre usando elementos option
, de la forma:
En el ejemplo anterior se creará una lista desplegable con cuatro opciones. Al enviar el formulario el valor seleccionado nos llegará en la variable marca
. Además, para elegir una opción por defecto podemos utilizar el atributo selected
, por ejemplo:
Botones
Por último vamos a ver como añadir botones a un formulario. En un formulario podremos añadir tres tipos distintos de botones:
submit
para enviar el formulario,reset
para restablecer o borrar los valores introducidos ybutton
para crear botones normales para realizar otro tipo de acciones (como volver a la página anterior).
A continuación se incluyen ejemplo de cada uno de ellos:
Last updated