{10127} - 10.1.10 Validação de Dados
O CakePHP percorreu uma longa estrada combatendo a monotonia da validação de dados de formulário. Todo mundo detesta codificar formulários intermináveis e suas rotinas de validação. O CakePHP torna tudo isso mais fácil e mais rápido.
Para usufruir das vantagens dos recursos de validação, você vai
precisar usar o FormHelper do Cake em suas views. O FormHelper está disponível
por padrão em todas as suas views na variável $form.
Aqui está nossa view add:
<!-- Arquivo: /app/views/posts/add.ctp -->
<h1>Adicionar Post</h1>
<?php
echo $form->create('Post');
echo $form->input('title');
echo $form->input('body', array('rows' => '3'));
echo $form->end('Salvar Post');
?> <!-- Arquivo: /app/views/posts/add.ctp --><h1>Adicionar Post</h1><?phpecho $form->create('Post');echo $form->input('title');echo $form->input('body', array('rows' => '3'));echo $form->end('Salvar Post');?>
Aqui, usamos o FormHelper para gerar a tag de abertura para um formulário que o $form->create() gera:
<form id="PostAddForm" method="post" action="/posts/add">
<form id="PostAddForm" method="post" action="/posts/add">
Se create() for chamado sem quaisquer parâmetros, o
CakePHP assume que você está criando um formulário que submete para a action
add() do controller atual (ou para a action edit()
se um campo id for incluído nos dados do formulário), via POST.
O método $form->input() é usado para criar elementos
de formulário de mesmo nome. O primeiro parâmetro informa ao CakePHP qual o
campo correspondente e o segundo parâmetro permite que você especifique um
extenso array de opções - neste caso, o número de linhas para o textarea. Há
alguma introspecção automágica envolvida aqui: o input() irá exibir
diferentes elementos de formulário com base no campo do model em questão.
A chamada à $form->end() gera um botão de submissão
e encerra o formulário. Se uma string for informada como primeiro parâmetro
para o end(), o FormHelper exibe um botão de submit
apropriadamente rotulado junto com a tag de fechamento do formulário.
Novamente, confira o capítulo sobre os "Helpers
Principais" disponíveis no CakePHP para mais informações sobre os
helpers.
Agora vamos voltar e atualizar nossa view
/app/views/posts/index.ctp para incluir um novo link para
"Adicionar Post". Antes de <table>, adicione a seguinte
linha:
<?php echo $html->link('Adicionar Post',array('controller' =>
'posts', 'action' => 'add'))?> <?php echo $html->link('Adicionar Post',array('controller' =>'posts', 'action' => 'add'))?>
Você pode estar imaginando: como eu informo ao CakePHP sobre os requisitos de validação de meus dados? Regras de validação são definidas no model. Vamos olhar de volta nosso model Post e fazer alguns pequenos ajustes:
<?php
class Post extends AppModel
{
var $name = 'Post';
var $validate = array(
'title' => array(
'rule' => 'notEmpty'
),
'body' => array(
'rule' => 'notEmpty'
)
);
}
?> <?phpclass Post extends AppModel{var $name = 'Post';var $validate = array('title' => array('rule' => 'notEmpty'),'body' => array('rule' => 'notEmpty'));}?>
O array $validate diz ao CakePHP sobre como validar
seus dados quando o método save() for chamado. Aqui, eu
especifiquei que tanto os campos body e title não podem ser vazios. O mecanismo
de validação do CakePHP é robusto, com diversas regras predefinidas (números de
cartão de crédito, endereços de e-mail, etc.) além de ser bastante flexível,
permitindo adicionar suas próprias regras de validação. Para mais informações,
confira o capítulo sobre Validação de
Dados.
Agora que você incluiu as devidas regras de validação, tente
adicionar um post com um título ou com o corpo vazio para ver como funciona.
Uma vez que usamos o método input() do FormHelper para criar nossos
elementos de formulário, nossas mensagens de erros de validação serão mostradas
automaticamente.


























