sábado, 10 de outubro de 2015

Formulários com Zend

O Framework Zend 2, possui um recurso muito interessante, e prático, que é a possibilidade de se criar formulários separados da camada de visão.
No início pode parecer meio confuso, ou até mesmo desnecessário, mas conforme vamos utilizando, vemos sua total praticidade:
  • A possibilidade de incluir ou remover um campo sem mexer, e possivelmente quebrar, o HTML;
  • Definir um campo como necessário ou não;
  • Trocar o nome do campo do formulário;
  • Tratar a validação do formulário e etc.

Vamos fazer um exemplo prático que será utilizado futuramente para gravar um registro no banco de dados.
Vamos abrir o Eclipse PDT e criar a pasta “Form” dentro de “module/Usuario/src/Usuario”
Dentro da pasta Form, que acabamos de criar, vamos criar o arquivo CadastroForm.php com o seguinte conteúdo:


<?php
namespace Usuario\Form;

use Zend\Form\Form;

class CadastroForm extends Form {
      
       public function __construct($fieldset) {
             parent::__construct($fieldset);
             $this->setAttribute('method', 'post');
             $this->add(array(
                           'name' => 'nome',
                           'attributes' => array(
                                  'type' => 'text',
                           ),
                           'options' => array(
                                  'label' => 'Nome',
                           )
             ));
             $this->add(array(
                           'name' => 'email',
                           'attributes' => array(
                                  'type' => 'text',
                           ),
                           'options' => array(
                                  'label' => 'Email',
                           ),
             ));
             $this->add(array(
                           'name' => 'password',
                           'attributes' => array(
                                  'type' => 'password',
                           ),
                           'options' => array(
                                   'label' => 'Senha',                   
                           ),
             ));
             $this->add(array(
                           'name' => 'submit',
                           'attributes' => array(
                                  'type' => 'submit',
                                  'value' => 'Gravar',
                                  'id' => 'submitbuton',
                           ),
             ));
       }
}




Nosso CadastroController.php, agora, ficou assim:

<?php
/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */

namespace Usuario\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Usuario\Form\CadastroForm;

class CadastroController extends AbstractActionController
{
    public function indexAction()
    {
        return new ViewModel();
    }
   
    public function adicionarAction() {
       $form = new CadastroForm('cadastro');
       $form->get('submit')->setValue('Cadastrar');
       return array('form' => $form);
    }
   
    public function apagarAction() {
      
    }
   
    public function editarAction() {
      
    }
}


Vamos exibir agora o nosso formulário. Abra o arquivo adicionar.phtml da pasta “module/Usuario/view/usuario/cadastro” e cole o seguinte código:

<?php
$title = 'Novo Cadastro';
$this->headtitle($title);
?>

<h1><?=$this->escapehtml($title) ?></h1>

<?php
$form = $this->form;
$form->setAttribute('action', $this->url('cadastro', array('action' => 'adicionar')));
$form->prepare();
?>

<?=$this->form()->openTag($form)?>
<?=$this->formCollection($this->form)?>
<?=$this->form()->closeTag($form)?>



Agora, quando acessarmos nossa rota de adicionar, que criamos no post de rotas, deveremos ter essa saída:



Explore a documentação do Zend para a lista completa dos atributos

Nenhum comentário:

Postar um comentário