Validation of MVC forms - PHP

2

To validate forms with MVC concepts, would it have to be in Controller , Model , or View ? Searching the internet I saw some articles on the subject, but some recommend doing in model others in view , the final, in> view ? This method does not get polluted code?

    
asked by anonymous 18.02.2016 / 02:37

2 answers

2

Recommended to use validation inside the model, and how much to use php code in the view can yes, but only to render some data coming from the controller. Example, use foreach / variables / for etc to render data coming from the controller ...

    
18.02.2016 / 03:43
2

Validation in the view is only used to avoid an "invalid" request, but this validation should not be trusted since the user can change it.

The most reliable validation is done on the server, this question of doing it in the controller or model is very conceptual, it goes from your organization / methodology, in both cases it will work.

By using Zend Framework 2, I created the custom to create an object for form (which turns the form into html) and another object for filtering and validating the data, both objects are part of the Model layer because it contains business rules , but are handled in the controller, I think this is a well organized way and I recommend it.

Here's an example:

class ProdutosController
{
    /**
     * Este action insere produto no banco de dados
     */
    public function addAction()
    {
        $requisicao = $this->getRequisicao(); // requisição
        $dados      = $requisicao->getPost(); // dados enviados pelo form

        $entidade = $this->getEntidade; // entidade, mapeamento da tabela produtos do banco de dados
        $model    = $this->getModel(); // model, classe que conversa diretamente com o BD
        $form     = $this->getForm(); // Objeto form para montar formulário HTML

        // Se requisição for post, é porque usuário enviou o formulário
        // caso contrário é GET então ele está visualizando o form de inserção
        if ($requisicao->isPost()) {

            // Injeta objeto que filtra e valida os dados
            $form->setInputFilter($entidade->getInputFilter());

            // Joga os dados enviados pelo form HTML pra dentro do objeto form
            // assim será possível valida-los e outras ações que são feitas pelo objeto form
            $form->setDados($dados);

            // Verifica se o form foi validado com sucesso (executa validações do inputFilter)
            if ($form->isValid()) {

                // hidrata/popula a entidade com os dados que estavam no form
                $entidade->hidratar($form->getDados());

                // insere a entidade no banco de dados
                $model->insert($entidade);

                // Após inserção, redireciona para listagem
                $this->redirect()->toRoute('produtos/lista');
            }
        }

        // Caso requisição não seja POST ou caso validação do form tenha falhado
        // então carregar a view
        // caso validação do form tenha falhado, vai enviar as msgs de erro para a view tb

        // retornar um array é o jeito do Zend de enviar variáveis para a view
        return array(
            'variavel1' => 'valor1',
            'variavel2' => 'valor2',
            'variavel3' => 'valor3',
            'form'      => $form,
        );
    }
}
    
18.02.2016 / 17:34