Los formularios en Codeigniter 4 ya están en marcha y su sistema de validación también, y la verdad que se parecen mucho al sistema utilizado en Codeigniter 3, pero mejorado y con programación orientada a objetos.
En este tutorial vamos a ver lo que se prepara para la nueva versión de Codeigniter en lo que refiere a la creación y validación de formularios.
Carga de helpers de formularios
Para poder utilizar los formularios lo primero que debemos hacer es cargar los helpers form y url, ambos son necesarios, esto lo podemos hacer en el constructor de nuestra clase de la siguiente forma.
1 2 3 4 5 |
public function __construct(...$params) { parent::__construct(...$params); helper(['form', 'url']); } |
Cuando queramos sobreescribir el constructor de un controlador en Codeigniter 4 deberemos hacerlo así, de esta forma podremos tener acceso a todo lo que el controlador padre nos ofrece.
Desarrollar formularios en Codeigniter 4
Una vez tenemos cargados los helpers podemos crear el siguiente formulario de login para empezar a trabajar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<html> <head> <title>Formularios en Codeigniter 4</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.8/css/materialize.css" /> </head> <body> <div class="container"> <h1 class="center">Formulario de login con CI4</h1> <hr> <div class='red center' style='color: #fff' role="alert"> <ul> <?php if(isset($errors)) { foreach($errors as $error) { echo "<li>$error</li>"; } } ?> </ul> </div> <?php echo form_open('login/dologin') ?> <?php echo form_hidden('id', '0') ?> <?php echo form_label('Email') ?> <br> <?php echo form_input([ 'type' => 'text', 'name' => 'email', 'id' => 'email', 'value' => set_value('email', ''), 'class' => 'email' ]) ?> <?php echo form_label('Password') ?> <br> <?php echo form_password([ 'name' => 'password', 'id' => 'password', 'value' => set_value('password', ''), 'class' => 'password' ]) ?> <?php echo form_submit('submit', 'Do Login!', [ 'class' => "waves-effect waves-light btn", 'style' => 'width: 100%' ]) ?> <?php echo form_close() ?> </div> </body> </html> |
Si has trabajado con Codeigniter 3 estoy seguro que esto te suena y mucho, es el formulario más sencillo que te has podido encontrar.
La funciones form_open y form_close abren y cierran el formulario, pero además, si tenemos configurado correctamente la protección csrf nos añade un token para evitar ataques de este tipo.
Con las funciones form_xxx del helper form podemos crear campos de formulario de forma muy sencilla.
La función set_value recupera los valores del formulario enviado en caso de que el formulario falle, así no tenemos que introducir de nuevo ese dato.
Otra cosa interesante es la variable $errors, si el formulario falla, ahí tendremos los errores de la validación.
Validación de formularios en Codeigniter 4
Ahora que ya tenemos el formulario preparado y listo para enviar, vamos a crear el método dologin en el controlador Login con el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
public function dologin() { $validation = \Config\Services::validation(); //ddd($validation); $validation->setRules([ //|is_unique[users.email] 'email' => 'valid_email|required', 'password' => 'required|min_length[10]' ], [ 'email' => [ 'required' => 'El campo email es requerido', 'valid_email' => 'El formato del email no es correcto', 'is_unique' => 'El email ya existe en base de datos' ], 'password' => [ 'min_length' => 'El password es demasiado corto', 'required' => 'El campo password es requerido', ] ] ); if($validation->withRequest($this->request)->run() === FALSE) { $errors = $validation->getErrors(); return view('login', ['errors' => $errors]); } else { //$email = $this->request->getPost("email"); //$password = $this->request->getPost("password"); return view('success'); } } |
Lo primero que hacemos aquí es crear una nueva instancia de la clase Validation, establecemos las reglas de validación y comprobamos con la concatenación de métodos withRequest (obtiene los datos post) y run (ejecuta la validación) si todo ha ido bien, en caso de que el formulario falle, accedemos a los errores de validación con $validation->getErrors() y mostramos de nuevo la vista, en caso contrario mostramos una vista de success.
También puedes ver que para acceder a los datos del formulario simplemente debemos utilizar el método $this->request->getPost(“campo”); pasando el nombre del campo del formulario.
Aunque todavía queda mucho para que Codeigniter 4 esté preparado y sea estable, podemos ver que algo que sigue manteniendo es su sencillez.