Conforme eu havia prometido aqui, hoje eu estarei dando continuidade aos meus tutoriais sobre helpers. O action helper, assim como view helper, serve para melhorar o reaproveitamento de códigos e manter seus controllers o mais limpo possível.
Na empresa aonde trabalho, o primeiro problema que apareceu no uso do ZF foi a criação constante de formulários. Esse processo nos forçava a criar vários “getForms“, muitos deles com o mesmo código. Vamos generalizar esse tipo de código, criar um helper e ser mais feliz!
Configurando
Mais uma vez, estarei levando em consideração que você está utilizando o padrão MVC com plugins do ZF (padrão que o zend studio cria). Já recebi vários emails do tipo “Como configurar o ZendFramework” ou então “Como criar a primeira aplicação com o ZF”. Prometo postar algo sobre isso em breve. Vamos lá:
Adicione a seguinte linha no seu plugin “Initializer.php” (ou em seu bootstrap, caso esteja configurado de outra forma)
Zend_Controller_Action_HelperBroker::addPath($CAMINHO_FISICO . '/library/helpers/', 'Zend_Controller_Action_Helper');
Tenha em mente que a váriavel $CAMINHO_FISICO deve conter o caminho da sua aplicação no servidor.
Com essa linha configurada corretamente o ZF já vai conseguir “enxergar” o seu helper.
Criando o Action Helper
<?php
/**
* Cria o objeto do form indicado.
* @author Nivaldo Arruda - nivaldo@gmail.com
* @version 1.0
*/
class Zend_Controller_Action_Helper_Formulario extends Zend_Controller_Action_Helper_Abstract
{
/**
* instancia o formulario.
* Exemplo para o parametro: $opcoes
* $opcoes['id'] = Para salvar uma edição de dados
* $opcoes['url'] = url da action
*
* @param string $formulario
* @param Array $opcoes
* @return Object
*/
public function criar($formulario, array $opcoes=null)
{
//Caso o seu autoload esteja habilitado, essa linha pode ser comentada
require_once $formulario.'.php';
$id = $opcoes['id'];
/**
* Gera o parametro "id" caso o mesmo seja informado (para URL de editar);
*/
if($id)
$id = "/id/".$id;
/**
* Instancia o formulario informado
*/
$form = new $formulario(array(
'action' => $opcoes['url'].$id,
'method' => 'post',
'id' => $formulario,
), $opcoes);
return $form;
}
}
Perceberam que é uma classe bastante simples não? Mas para um sistema comum, com muitos cadastros, ela é essencial e vai te economizar bastante linhas de códigos =)
Utilizando
Para chamar essa classe é simples. Adicione a seguinte linha no seu controller:
$opcoes['url'] = '/usuarios/salvar';
$form = $this->_helper->Formulario->criar('usuarioForm', $opcoes);
Esse código irá instanciar um objeto do tipo “usuarioForm” dentro da váriavel $form. Só lembre-se que o nome da classe do seu form deve ser “usuarioForm” e o arquivo dela: usuarioForm.php.
Código bem simples, para exemplificar os actions helpers, que serão um grande aliado seu do dia a dia.
^^
