Muitas vezes precisamos criar um formulário de contato ou qualquer outro formulário que não será gravado no banco e sim enviado para um e-mail ou coisa parecida. Nestes casos também é interessante validar os campos e nada melhor do que utilizar a validação do próprio CakePHP.
Para isso precisaremos criar um Model para o formulário. Para o exemplo criaremos um formulário simples de contato com nome, e-mail, telefone e mensagem.
/app/models/contato.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php class Contato extends AppModel { public $useTable = false; public $validate = array( 'nome' => array( 'rule' => 'notempty', 'message' => "O nome deve ser preenchido", ), 'email' => array( 'rule' => array('email'), 'message' => "O e-mail deve ser preenchido", ), 'mensagem' => array( 'rule' => 'notempty', 'message' => "A mensagem deve ser preenchida", ) ); } ?> |
Na Model acima não temos nada que alguém que já lide com o CakePHP não conheça, o que devemos observar é a linha 3 $useTable=false que informa que este Model não está associado a uma tabela do banco de dados.
Vamos agora a criação de nosso formulário(view).
/app/view/home/contato.ctp (por exemplo)
1 2 3 4 5 6 7 8 9 10 11 |
<?php echo $form->create('Contato',array('url'=>'/contato'))?> <?php echo $form->input('nome',array('label'=>'Nome:'))?> <?php echo $form->input('email',array('label'=>'E-mail:'))?> <?php echo $form->input('telefone',array('label'=>'Telefone:'))?> <?php echo $form->textarea('mensagem',array('cols'=>'40','rows'=>'3') )?> <?php echo $form->end('Enviar'); ?> |
Também nenhuma novidade, só devemos ressaltar a linha1 onde estamos utilizando o Model Contato para o formulário.
Vamos agora para o action do controller onde iremos validar os campos.
/app/controller/home.ctp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
… var $uses = array('Contato'); ... function faleconosco() { if( $this->data){ $erros =""; $this->Contato->set($this->data); if ( $this->Contato->validates() ) { //envia o e-mail ou faz qualquer outra coisa com os dados }else{ foreach( $this->Contato->invalidFields() as $e){ $erros .= $e."<br />"; } $this->Session->setFlash($erros); } } |
Bom esta parte vale uma pequena explicação!
Na linha 2 declaramos que iremos utilizar no controller o Model Contato.
Na linha 5 verificamos se foi enviado algum dado pelo formulário, na linha 6 inicializamos uma variável para armazenar os erros encontrados no formulário. Na linha 7 configuramos o Model contato com os dados vindo do formulário.
Na linha 8 utilizamos o método validates() que verifica os dados conforme as regras estipuladas no Model e retorna true não houver erro e false se alguma das regras não foi satisfeita.
Na linha 11 estamos no bloco onde alguma regra não foi satisfeita então devemos listas para o usuário. O método que nos devolve esta lista de erros é o invalidFields() que retorna um array com as mensagem estipuladas no Model. Percorremos este array concatenamos estas mensagens na variável $erros e na linha 14 salvamos na sessão para ser mostrada na view.
Bom era isso pessoal
0sem comentários ainda