Esta é uma maneira de criar regras de validação do lado do servidor com o #codeigniter 4 com #validation https://codeigniter.com/user_guide/libraries/validation.html#running-validation.
A vantagem deste conceito é que deixamos nosso #controller mais limpo e nossas regras mais organizadas.
Neste exemplo vamos ver uma pequena amostra deste tipo de validação com arquivo com um cadastro de usuário.
Você pode validar qualquer tipo de dado e até criar regras de validação customizadas.
Temos ;
name - requerido
email - requerido, e-mail válido e único na table users
username - requerido, mínimo 4 de comprimento e único na table users
password - regra de exmplo customizada para validar um senha (comprimento mínimo 5)
user_group - requerido e inteiro natural não zero/nulo.
status - requerido e inteiro natural não zero/nulo.
Criando as regras no arquivo app/Config/Validation.php
// --------------------------------------------------------------------
// Rules
public $users = [
'name' => 'required',
'email'=> 'required|valid_email|is_unique[users.email,id,{id}]',
'username' => 'required|min_length[4]|is_unique[usuarios.username,id,{id}]',
'password' => 'password[5,{id}]', // Você pdoe adicionar mais regras aqui
'user_group' => 'required|is_natural_no_zero',
'status' => 'required|is_natural_no_zero'
];
// --------------------------------------------------------------------
Instanciando a biblioteca no método do controller.
$validation = \Config\Services::validation();
Testando as validações. O if de teste recebe o método de validação enviando o $post a validar.
if ($this->data['validation']->run($post, 'tasks_save')) {
// todo...
// Execute as ações quando a validação passar.
// Neste exemplo, considerando que tudo correu bem estamos redirecionando o usuário para a tela principal de determinado cadastro com uma mensagem de sucesso.
A mensagem de sucesso está configurada em app/Language/pt-BR/FlashMessages.php onde criamos um arquivo para gerenciar nossas flashMessages.
return redirect()->to('todo/tasks/new')->with('message', lang('FlashMessages.sucesso'));
}
// Caso algo dê errado.
Carregamos a view normalmente e enviamos o array de erros para que ele seja exibido na view.
$errors = $validation->getErrors();
return view('new', ['errors' => $errors]); // Agora só precisamos testar na view se há erros e exibí-los para o usuário.
Na view você pdoe verificar se há erros com o hasError() ou getError()
$validation->getError('name');
if($validation->getError('name')){
// coloque aqui a mensagem para o erro no campo name
}