CakePHP 1.2 Validação de formulários sem Modelos
No CakePHP, as regras de definições são definidas nos modelos, então como fazemos quando queremos gerar um formulário, porém esse formulário não necessariamente vai ser salvo em um banco de dados, logo não tem modelo.
Para fazer isso na verdade criamos um modelo, esse modelo usamos como citado no post anterior. Ou seja, um modelo sem tabela.
Vamos por em prática com um caso de um formulário de contato:
Criando o modelo, sem tabela no CakePHP
file contact.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | < ?php class Contact extends AppModel { public $useTable = false; public $validate = array( 'name' => array('rule' => 'notEmpty', 'message' => "Can't be empty the field name", ), 'email' => array('rule' => 'email', 'message' => "Put a email valid", ), 'message' => array('rule' => 'notEmpty', 'message' => "Can't be empty the field message", ), ); } ?> |
Definidos três campos a serem validados, name, email e message.
Agora na view:
1 2 3 4 5 6 7 | < ?php echo $form->create('Contact', array('url' => '/contact/')); ?> <fieldset> < ?php echo $form->input('name'); ?> < ?php echo $form->input('email'); ?> < ?php echo $form->input('message'); ?> </fieldset> < ?php echo $form->end('Send'); ?> |
Criamos o form usando nosso modelo, onde guardamos a regra de validação, e mandamos imprimir os campos.
No controller:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | < ?php class ContactController extends AppController { public $name = 'Contact'; public $uses = array('Contact'); public function index() { if (!empty($this->data)) { $this->Contact->set($this->data); if ($this->Contact->validates()) { //send mail } } } } ?> |
Pronto usamos o modelo para validar os campos de formulário antes de fazermos nosso envio do email de contato.
Vinicius, muito legal o post e com certeza vai ajudar muita gente. Também já fiz este tipo de coisa e o resultado é muito bom. Entretanto, queria dizer uma questão referente a MVC. A model não serve apenas para comunicação/armazenamento no banco de dados. A model serve para modelar os dados, ela é quem vai tratar os dados e guarantir as regras de negócio, enquanto o controller serve para fazer o meio de campo, coordenando as ações do usuário e distribuindo estas ações para views. As views tem o trabalho de apresentar os dados, sem regras.
Digo isso devido ao seu primeiro parágrafo, que diz que se o formulário não vai pro banco não tem modelo…
Bem, era isso. Mais uma vez parabéns pelo post.
Sim concordo plenamente, apenas escrevi de tal forma, que é normal pessoas associarem modelo a tabelas, porém na verdade modelo é uma representação de um domínio de dados.
porém ae vem mais a parte teórica do designer patterns MVC, então, apenas descrevi como normalmente vem a pergunta na mente “como vou fazer a validação do form se esse form não tem modelo?”
era isso
obrigado pelo comentário
E se o formulário estiver manipulando diversos campos de diferentes models dentro de um create form cujo model foi declarado como null? Tambem é possível?
create($model = null, array(‘url’ => ‘relestoqueentrada’/*. $dados['Post']['id']*/ ))
$form->input(‘Comentario.di’, array(‘label’=>false))
$form->input(‘Estoque.numserie’, array(‘label’=>false))
Obrigado por compartilhar seus conhecimentos!
e se eu quiser import um limite do tipo between para nome, email, etc, para poder salvar no banco de dados?
Tentei com
‘name’ => array(
‘alphanumeric’=>array(
‘rule’=>’alphanumeric’, ‘required’=>true, ‘message’=>’Entre com seu nome!’
),
‘between’=>array(
‘rule’=>array( ‘between’,6,100 ), ‘message’=>’Entre 6 e 100 caracteres!’
)
),
mas fracassei ~~
Sempre fica pedindo pra informar o nome, mesmo com ele lá ~~