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

sábado, 3 de outubro de 2015

Criando as rotas no Framework Zend 2

Nas publicações anteriores, aprendemos a instalar o Zend, configurar o Doctrine e criamos o novo módulo Usuário a partir do módulo padrão Application.

Vamos configurar as rotas de acesso desse novo módulo, ou seja, quando digitarmos no endereço do navegador:

nossa-aplicacao/rota/acao
Iremos executar alguma ação. Salvar, editar, excluir ou alterar. Funções básicas de um CRUD.

A rota pode ser qualquer nome que iremos escolher que apontará para o módulo que queremos trabalhar. Temos o módulo Usuário e nossa rota, se você quiser, não precisa, necessariamente, se chamar usuário. Podemos chamar de cadastro, por exemplo. ;)

Com o nosso Eclipse PDT aberto no nosso projeto teste vá até o arquivo /module/Usuario/config/module.config.php
Como esse módulo é uma cópia inteira do módulo Application, podemos observar que todo o arquivo faz referência às configurações do módulo Application. Vamos configurar ele para o nosso novo módulo.

O que está grifado de amarelo é para ser ajustado.

O que está grifado de vermelho é para ser excluído.

Vou colar o código original aqui, e vamos analisar as mudanças passo-a-passo para ficar mais fácil:




Já que trocamos o nome do arquivo IndexController.php para CadastroController.php, abra o arquivo e faça o seguinte ajuste dentro da classe.


Adicione também os métodos:

public function adicionarAction() {}
public function apagarAction() {}
public function editarAction() {}

Abra o arquivo index.phtml e exclua todo o seu conteúdo.
Escreva “Teste” e salve o arquivo.

Acrescente os arquivos:
adicionar.phtml
apagar.phtml
editar.phtml


Todos com letras minúsculas.

Pronto! Agora já podemos acessar a nossa aplicação e a nova rota que criamos está disponível :D
Podemos acessar pelos links:
/cadastro
/cadastro/adicionar
/cadastro/apagar
/cadastro/editar