Introdução ao Zend Form
Um dos melhores componentes do Zend Framework é sem duvidas o Zend Form, inclusive me arrisco a dizer que usar o ZF sem usa-lo é perda de tempo. O Zend Form nos ajuda a gerar formulários html e a valida-los com muita eficacia, e sua operação é extremamente simples. Vou dar um exemplo de como gerar um formulário de login usando-o. Eu não gosto muito de ficar falando de teoria portanto vou mostrar o exemplo todo comentado e espero que ele demostre com clareza o funcionamento do Zend Form.
Nota.: Eu estou partindo do pressuposto que você já tem um ambiente do ZF configurado, caso contrario recomendo a leitura deste artigo do Julio Martini no Imasters:
http://imasters.uol.com.br/artigo/4609/php/zend_framework_-_uma_visao_geral/
Arquivo do Controller: IndexController.php
* Controlador principal
*/
class IndexController extends Zend_Controller_Action {
/**
* Metodo Index
*/
public function indexAction() {
// Inclui o componente Zend Form
require( ‘Zend/Form.php’ );
// Instancia um novo formulario
$form = new Zend_Form();
// Configura o action e o method (para os dados serão enviados e através de que metodo (get ou post)
$form->setAction(‘/index/index’)->setMethod(‘post’);
// Instancia um campo do tipo texto
$usuario_email = new Zend_Form_Element_Text(‘usuario_email’, array(
// Define o label do campo
‘label’ => ‘E-mail: ‘,
// Define que o campo é obrigatório (por padrão esta opção é falso)
‘required’ => true,
// Adiciona filtros para o campo (estes filtros são elementos do Zend Validate)
‘validators’ => array(
‘NotEmpty’, // Define que este campo não pode ser vazio
‘EmailAddress’ // Define que este campo deve ser um endereço de email valido
)
));
// Adiciona as mensagens de erro
$usuario_email->getValidator(‘NotEmpty’)->setMessages( array(
Zend_Validate_NotEmpty::IS_EMPTY => ‘Este campo não pode ser vazio!’
));
$usuario_email->getValidator(‘EmailAddress’)->setMessages( array(
Zend_Validate_EmailAddress::INVALID => ‘Email invalido!’
// Existem varias outras validções de email, inclusive de host valido!
));
// Obs.: Por padrão as mensagens de erro do Zend Validate estão em inglês, em outro post mostrarei como traduzi-las
// de uma só vez através do componente Zend Translate
// Instancia um campo do tipo password
$usuario_senha = new Zend_Form_Element_Password(‘usuario_senha’, array(
// Define o label do campo
‘label’ => ‘Senha: ‘,
// Define que o campo é obrigatorio (por padrão esta opção é falso)
‘required’ => true,
// Adiciona os filtos
‘validators’ => array(
array(‘NotEmpty’, true), // Não pode ser vazio
// Definimos aqui o tamanho da string para um valor entre 6 e 20 caracteres
array(‘StringLength’, false, array(6, 20))
)
));
// Adiciona as mensagens de erro
$usuario_senha->getValidator(‘NotEmpty’)->setMessages( array(
Zend_Validate_NotEmpty::IS_EMPTY => ‘Este campo não pode ser vazio!’
));
$usuario_senha->getValidator(‘StringLength’)->setMessages( array(
Zend_Validate_StringLength::TOO_SHORT => ‘Senha deve ter mais de 6 caracteres’,
Zend_Validate_StringLength::TOO_LONG => ‘String deve ter menos de 20 caracteres’
));
// Instancia um campo do tipo checkbox para persistir a sessão do usuário
$usuario_mantemLogado = new Zend_Form_Element_Checkbox(‘usuario_mantemLogado’, array(
// Define o label do campo
‘label’ => ‘Permanecer logado’
));
// Aqui invertemos a ordem com que ele exibirá o label, deixando o mesmo após o campo
$usuario_mantemLogado->getDecorator(‘label’)->setOption(‘placement’, ‘APPEND’);
// Por padrão o Zend Form gera o label antes do campo (PREPEND)
// Instancia um botão do tipo submit
$submit = new Zend_Form_Element_Submit(‘submit’, array(
// Define o label do botão
‘label’ => ‘Entrar’
));
// Aqui removemos a tag <label>, ela não é necessária em um botão
$submit->removeDecorator(‘label’);
// Adiciona os campos ao formulário
$form->addElements( array( $usuario_email, $usuario_senha, $usuario_mantemLogado, $submit ));
// Vamos verificar se o formulário foi enviado
if ($this->_request->isPost()) {
// Obtém os dados do formulário
$data = $this->_request->getPost();
// Verifica se o formulário é valido
if ($form->isValid( $data )) {
// Aqui você define a ação de um formulário valido
}
// Caso o formulário não seja valido continuamos a executar a pagina para exibir as mensagens de erro do usuário
}
// Coloca o formulário na view
$this->view->form = $form;
}
}
Arquivo da View: index/index.php
echo $this->form;
// Simples. Não?
Observações: Uma maneira melhor de trabalhar com o Zend Form é estendendo a classe Zend_Form e configurando seu formulário como um objeto, desta forma:
* Cria um formulário estendendo a classe Zend Form
*/
Class Form_Login extends Zend_Form {
/**
* Inicializa e configura o formulário
* Por padrão todas as classes do Zend Framework usam um método init logo após o construtor,
* é uma forma de estender as classes sem sobrescrever o construtor original
*/
public function init() {
// Configuração do form aqui!
}
}
É isso ai. Teve duvidas? Deixa nos comentários ai.
Referências:
http://framework.zend.com/manual/en/zend.form.html
http://framework.zend.com/manual/en/zend.validate.html
Saudações Diego!
Aqui é o Marcio do UNIBH, me adiciona ao messenger:
marciopedrosa.ti@hotmail.com ok?
Abraços!
Mas essa classe Form_Login fica aonde na minha estrutura? No Controller?
A localização do arquivo depende de como você configurou sua aplicação.
Normalmente deve ficar em application/forms/Login.php
Mas como disse antes, depende de como você configurou sua aplicação.
Abraços
Amigo, vc tem algum material sobre a formatação do Zend Form? Eu tentei de várias formas formatar corretamente, mas em sucesso…
Posta um exemplo pra gente ai…
Cleiton
Meu blog ta um pouco abandonado mas vou ver se nas proximas semanas eu preparo um artigo sobre isso.
Abraços