Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Validação do formulário

Boa tarde. A validação de um formulário (por exemplo, um cadastro de cliente), é feita direto no Controller ou é melhor criar uma classe para isso?

Penso que seja melhor criar uma classe, pois o controller iria ficar muito poluído.

6 respostas

Também penso dessa forma, já que em todo o momento do curso deixamos o código sempre bem separado.

Bom, acho que o melhor mesmo é criar uma classe.

A dúvida agora é saber onde criar esta classe. Pensei em criar uma pasta chamada "Regras" e colocar esta e todas as classes de validação lá dentro.

É correto assim?

Fala, Flávio.

Ótima pergunta e a resposta é: Depende. hahaha

O propósito do curso foi primariamente apresentar o MVC e o MVC não apresenta solução pra essa sua questão.

No mundo real, existem algumas formas de realizar validações:

  1. Classes específicas de validação, às vezes chamadas de Validators
  2. Validações diretamente nas entidades, lançando exceções e fazendo com que o controlelr só exiba o erro correto
  3. Validações diretamente nos controllers, antes de atingir a camada de domínio (entidades, por ex)
  4. Etc.

Eu, particularmente, gosto muito da segunda opção, apesar dela ter desvantagens. Eu gosto dela pois mantém as regras onde deveriam estar: No domínio da aplicação. Minha sugestão é: Teste várias formas diferentes, pense nos prós e contras de cada abordagem (toda abordagem tem prós e contras) e veja qual satisfaz sua necessidade de forma mais interessante.

1- Se entendi bem, acho que é assim que estou usando. O controller recebe os dados do POST e recheia a entidade com os dados.

Logo após chamo a classe de validação e passo a instância como parâmetro.

Essa classe de validação retorno true ou false para o controller. Mais ou menos assim:

...
$nome = $_POST['nome'];
$usuario = new Usuario($nome);

$validado = new ValidacaoUsuario($usuario);

if ($validado) {
// segue a lógica...
}
...

2- Não sei entendi bem. Até a parte da Entidade fazer a validação, blz. Só não entendi em caso de falha, como o Controller irá tratar isso. Vou ver se faço um teste aqui com exceções.

3- Esse eu até tinha feito, mas o controller ficou muito grande :) Então achei melhor chegar até a camada de domínio para instanciar a entidade e depois passar para uma classe de validação (item 1).

solução!

2 - Não sei entendi bem. Até a parte da Entidade fazer a validação, blz. Só não entendi em caso de falha, como o Controller irá tratar isso. Vou ver se faço um teste aqui com exceções.

O controller trataria a exceção lançada e retornaria a resposta de erro pro usuário de forma amigável.

boa! Obrigado!