Laravel 5.4 #4 : Insertar datos desde un formulario y validarlo

En esta entrada vamos a tratar de insertar datos desde un formulario a través del método POST y después validaremos estos datos sean correctos.

Insertar datos desde un formulario

Primero de todo definimos los campos que serán editables en el modelo, para ello añadimos la siguiente línea al modelo:

Añadimos la nueva ruta que será de tipo POST, que es un tipo de método HTTP que pasa los parámetros de una manera que no son visibles, no como por GET que los pasa por URL.

Entonces, abrimos el archivo de las rutas y añadimos al final esto:

Ahora vamos al controlador y añadimos el siguiente método:

Lo que hace es coger los datos pasados por POST a través de la variable $request e insertarlo a través del método create del modelo Post que hace referencia a la tabla posts de la base de datos. Después, simplemente redirige a la lista de posts.

En este enlace puedes encontrar más información sobre Eloquent ORM y sus otros métodos (update para editar, delete para eliminar, etc.). En otra entrada trataremos esto.

Ahora solamente falta añadir el formulario donde introducir los datos, yo lo he añadido al principio del archivo de la lista de posts:

Con esto, obtenemos:

 

Validar los datos

Siguiendo la documentación de Laravel sobre las validaciones, vamos a añadir este código en el controlador:

Esto nos validará la variable POST title y body. Title es requerido, único y máximo 255. Body simplemente será requerido.

Pero solamente con esto no se nos mostrarán los errores en la vista. para que se muestren tenemos que añadir este código antes del formulario:

Los errores saldrán en inglés, para que salgan en cualquier otro idioma, tendremos que descargar la traducción de Laravel o hacerlo nosotros mismos y poner los archivos en  resources/lang .

 

Validar los datos con Form Requests

Vamos a validar los datos de otra manera, un poco más compleja, pero al final hace lo mismo. Este tipo de validaciones son para casos más complejos.

Creamos el archivo con artisan:

Se nos habrá creado un archivo en app/Http/Requests/PostRequest.php , lo abrimos y modificamos el método rules y authorize:

En el método authorize podremos poner si puede enviar datos según su rol, permisos, si es propietario, etc.

Para aplicar esta nueva forma, vamos al controlador y modificamos el método donde está la validación anterior:

 

Y con esto el resultado será el mismo que con la otra manera.

 

En la siguiente entrada profundizaremos sobre Blade, el motor de plantillas de Laravel.

 

-

Validaciones: https://laravel.com/docs/5.4/eloquent


Aloja tu proyecto en DigitalOcean: Obtén $200 de crédito gratis al registrarte a través de este enlace.

Si hay cualquier tipo de error en el post o te surge cualquier duda, no dudes en ponerlo en los comentarios o enviarme un correo desde la página de contacto.

? CONTACTAR

5 comentarios en “Laravel 5.4 #4 : Insertar datos desde un formulario y validarlo

  1. Ante todo, muchas gracias por este fantástico tutorial, imprescindible para los novatos como yo.

    Una duda: al enviar los datos del formulario, me aparece una pantalla de error con el siguiente mensaje:

    (1/1) MassAssignmentException
    _token

    Por lo que he visto, parece que hay que definir de alguna manera los campos de la base de datos sobre los que se quiere editar. Es así?

    Gracias de nuevo!

  2. Observando tu Código te hago una pregunta fuera del Tema.

    public function store(PostRequest $request) {
    Post::create($request->all());
    return redirect(‘posts’);
    }

    Observo que no guardas los datos en el controlador, sino los pasas a un objeto Post. Yo guardo directamente en el Controlador, que me dices de eso, lo estaré haciendo bien.

    Me Parece más elegante tu código. muestrame ese objeto Post a ver aprendo de las buenas prácticas.

    1. Hola Edser!

      Muchas gracias por tu comentario.

      No acabo de entender a qué te refieres con guardarlo directamente en el controlador.
      Te refieres a guardar en una variable la request y después pasar esta variable como parámetro al método create?
      Si me lo puedes aclarar para poder echarte una mano.

      Un saludo!

Deja una respuesta

  Acepto la política de privacidad