Contenido del curso

Manos a la obra con nuestro proyecto

Validación de formularios en Laravel con old()

Resumen

Cuando un formulario se envía vacío, la base de datos lanza un error porque los campos no aceptan valores nulos. La validación en Laravel resuelve esto antes de que la petición llegue al modelo, y además mejora la experiencia del usuario al conservar lo que ya escribió. Aquí aprendes a aplicar reglas required, mostrar mensajes de error y mantener el texto previo con old().

¿Por qué necesitas una capa de validación en el controlador?

Sin validación, el sistema intenta guardar registros incompletos y la base de datos responde con errores poco amigables como el título no puede estar nulo o el body no puede estar nulo [0:25]. Peor aún, si envías un título repetido, aparece el error de registro duplicado [0:55], lo que rompe la experiencia.

La validación funciona como un filtro previo: revisa los datos antes de tocar la base de datos y devuelve mensajes claros al usuario. Se aplica tanto al crear como al editar, porque ambos flujos comparten las mismas reglas.

¿Qué hace required en Laravel? Marca un campo como obligatorio. Si llega vacío, Laravel detiene la petición y devuelve un error de validación sin tocar la base de datos.

¿Cómo aplicar reglas de validación en el controlador?

La configuración es directa. Dentro del método store y del método update del controlador usas la función validate sobre el objeto request y defines las reglas con un arreglo asociativo [1:25].

php $request->validate([ 'title' => 'required', 'body' => 'required', ]);

Con esto, el sistema bloquea el envío de cualquier formulario vacío. La misma regla se duplica en la acción de actualización para mantener consistencia entre crear y editar [1:55].

¿Cómo mostrar mensajes de error en la vista Blade?

Para que el usuario sepa qué corregir, agrega un mensaje de feedback junto a cada campo del formulario. Justo después de la etiqueta label, inserta un span con la directiva de errores de Laravel [2:20]:

blade <span class="text-sm text-red-500"> @error('title') {{ $message }} @enderror </span>

Repite el bloque para el campo body cambiando el nombre. Las clases text-sm y text-red-500 hacen que el mensaje sea pequeño y rojo, una convención visual que el usuario reconoce al instante.

¿Cómo conservar los datos escritos cuando falla la validación con old()?

Al fallar la validación, el formulario se recarga y, por defecto, se pierde lo que el usuario ya había escrito. Eso frustra. La función old() de Laravel recupera el valor anterior del campo y lo coloca de vuelta en el input [3:20].

En el atributo value de cada campo escribes:

blade value="{{ old('title', $post->title ?? '') }}"

El primer argumento es el nombre del campo. El segundo es el valor por defecto, que en una vista de edición proviene del registro de la base de datos. Así, si vienes de crear y fallas, ves lo que escribiste; si vienes de editar y fallas, ves el valor original o el modificado.

¿Para qué sirve old() en Laravel? Recupera el valor que el usuario envió en la petición anterior. Es ideal para mantener el formulario lleno cuando la validación falla y evitar que se vuelva a escribir todo.

¿Qué pasa al editar y borrar un campo obligatorio?

Si entras a editar, borras el contenido del body y envías, el sistema mantiene el título original, muestra el mensaje el body es requerido y no toca la base de datos [4:30]. Ese es el comportamiento esperado: feedback inmediato, datos preservados, integridad protegida.

¿Qué conceptos clave dominas con esta validación?

Aquí están las piezas que se conectaron en el flujo:

  • Validación en el controlador con $request->validate(): bloquea peticiones inválidas antes de que lleguen al modelo [1:25].
  • Regla required: declara que un campo no puede ir vacío.
  • Directiva @error de Blade: imprime el mensaje de error asociado a un campo específico [2:35].
  • Función old(): recupera valores enviados previamente para no perder el trabajo del usuario [3:20].
  • Clases utilitarias text-sm y text-red-500: estilizan el mensaje de error con tamaño pequeño y color rojo.

El siguiente paso natural es resolver el caso del título duplicado, que aparece cuando dos registros comparten el mismo valor único. Esa regla se trabaja con unique sobre la tabla correspondiente.

¿Ya aplicaste estas reglas en tu propio formulario? Cuéntame en los comentarios qué validaciones agregaste y si combinaste required con otras reglas como min, max o email.