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

Validação do curso

Bom dia!

Vimos no curso que o controller Persistecia (para salvar um curso) está assim:

  public function processarRequisicao()
  {
    $descricao = filter_input(INPUT_POST, 'descricao', FILTER_SANITIZE_STRING);
    $curso = new Curso();
    $curso->setDescricao($descricao);

    $id = filter_input(
      INPUT_GET,
      'id',
      FILTER_VALIDATE_INT
    );

    if (!is_null($id) && $id !== false) {
      $curso->setId($id);
      $this->entityManager->merge($curso); // atualização
      $this->defineMensagem('success', 'curso atualizado com sucesso');
    } else {
      $this->entityManager->persist($curso); // novo registro
      $this->defineMensagem('success', 'curso cadastrado com sucesso');
    }
    $_SESSION['tipo-mensagem'] = 'success';
    $this->entityManager->flush();
    header('Location: /listar-cursos');
  }

Aqui temos uma pequena validação do id.

Fosse um caso onde existissem vários campos, cada um com uma validação diferente (por exemplo, idade), ela seria feita aqui no controller ou em outro local?

4 respostas
solução!

Fala, Flávio. No Controller a gente só garante que o dado veio no formato correto. Ex.: Se o ID é inteiro, se a descrição é uma string, etc.

Validações referentes a regra de negócio estariam em nossas entidades. Ex.: Todo curso precisa ter pelo menos 3 palavras em seu nome. Esse tipo de validação estaria na entidade.

Caso tenhamos muitos campos a serem recebidos no Controller, podemos extrair a validação do tipo de dados para uma classe especializada nisso ou utilizar uma biblioteca que já recebe as requisições com dados validados (alguns frameworks proveem essa funcionalidade).

Acho que entendi.

As validações de regra de negócios são feitas pelas entidades. E as validações inerentes à requisição ficam dentro do Controller.

Seria isso?

Exatamente, Flavio! :-)

Vlw!!