terça-feira, 10 de abril de 2012

Formularios no zend framework


Vamos limpar nossa mente para a imaginação...
Como seria bom reaproveitar um formulario de forma que eu pudesse definir destinos diferentes ou ainda inserir um ou dois campos a mais... uma validação lógica e evitar scripts como SQL injection sem ter muito trabalho... deve ser um sonho... não sei...

Será que isso é possível? (Não vamos evangelizar o ZF mas...) Com o Zend Framework MUITA coisa é possível sem precisar "escovar bits"...e por isso hoje vou falar sobre Zend_Form ensinando a criar formularios completos sem muito trabalho e ainda reutilizando eles.

A verdade é que quando eu comecei a trabalhar com o ZF eu não gostava muito do Zend_Form e sempre achei melhor utilizar formularios escritos direto na view... Tolice a minha pois ficar escrevendo formularios e formularios só serviu para me dar trabalho(PENA =[ ), mas é fazendo "merda" que vamos aprendando não é? 

Só não faça merda com o sistema de um cliente... faça isso com suas experiências é melhor e mais seguro.

Quando vc baixa o Quickstart do zend framework por padrão ele já te da um diretório com o nome forms e vem até um exemplo de formulario com instancias de outras classes do zend, mas acredito que para um iniciante a curva de aprendizagem é longa quando ve uma classe pronta com tanta coisa... por conta disso vamos criar uma nova.

Nesse diretorio forms crie um arquivo chamado Exemplo.php e nele insira esse conteudo:

  1. <?php
  2. class Application_Form_Exemplo extends Zend_Form {
  3.     public function init() {
  4.         $titulo = new Zend_Dojo_Form_Element_ValidationTextBox('titulo');
  5.         $titulo->setLabel('titulo')
  6.                  ->setRequired(true)
  7.                 ->setRegExp("[\w\d]*");        
  8.         $submit = new Zend_Dojo_Form_Element_SubmitButton('Enviar');
  9.         $this->addElements(array($titulo, $submit));
  10.     }
  11. }
  12. ?>


O que fizemos ai foi simples, criamos uma classe Exemplo mas o nome dela foi dado de acordo com o diretório (Application/Forms/Exemplo) justamente para o ZF carrega-la sem precisar de malditos includes e essa classe extende da Zend_Form que tem diversos métodos para formulario.

Criamos um método init que é o construtor dessa classe e nele inserimos um input titulocom alguns métodos que definem label, obrigatoriedade e expressão regular respectivamente.

Criamos o objeto $submit passando seu nome para o construtor da classe SubmitButton e por fim adicionamos esses caras no formulario completo.

Mas e como eu faço para colocar isso na view?

Esse trabalho é bem simples... vá para o seu controller index na action index que é onde vamos chamar esse carinha e fica bem simples olha:

  1.      public function indexAction() {
  2.         $formulario = new Application_Form_Modelo();
  3.         $formulario->setAction('index/teste');
  4.         $this->view->formulario = $formulario;
  5.     }
Veja que nesse action fizemos algo muito simples, criamos um objeto $formulario que é instancia da classe que criamos(do nosso formulario) e setamos um local para onder esse form será enviado e por fim mandamos ele para a view...

E ai na view é só exibir essa criança (echo $this->formulario;) pronto, formulario pronto e podemos reutiliza-lo em qualquer lugar, podendo mudar o destino e ainda adicionar elementos, validações e etc...

Não entrei a fundo sobre as validações, formatação do formulario pois a ideia era mostrar de forma simples como ele funciona caso vc queira um estudo aprofundado nesses caras a documentação do zend esta mt boa ou ainda veja nesse blog onde o autor fala mt bem dos decorators do zend form: blog 

Bem pessoal por hoje é só.... valeu!



Nenhum comentário:

Postar um comentário