Upload
magno-matos
View
60
Download
0
Embed Size (px)
Citation preview
« Configurando o PHP para enviar email
no windows através do gmail
Entendendo modelos no zend
framework »
Tweet 2 0 3
Zend View Helpers e Zend Action Helpers
Helpers são classes auxiliares que tem como objetivo simplificar o código tanto na
view quanto no controller, simplificar de que forma? Se por acaso for necessário gerar
strings randômicas personalizadas no controller, ao invés de criar uma função em
todo controller que precisar de uma string randômica, podemos criar um action helper
que abstraia essa tarefa e fique disponível em todos os controllers, mas e se eu
precisar de uma função que limite o tamanho de um texto a ser exibido na minha
view? criamos então um view helper para auxiliar nessa tarefa, analisando e cortando
o texto se necessário, ficando disponível para todas as views, para obter o resultado
esperado chamamos uma função com o nome do helper.
Qual a diferença entre view helpers e action helpers?
Caso ainda não tenha ficado claro, a diferença é que os view helpers auxiliam nossa
camada de visão, nossas views, já os action helpers auxiliam nossos controllers.
Ambos são chamados como uma função direta e podem receber parâmetros, mas os
actions helpers vão além permitindo que sejam “instanciados”, podendo assim serem
manipulados como uma instância de classe, chamando métodos e etc, esse conceito
será melhor compreendido na parte final do tutorial onde vamos trabalhar com os
helpers.
Quais helpers estão disponíveis no zend framework?
Na documentação do zend framework conseguimos ver os helpers disponíveis,
confira os links abaixo.
Zend view helpers:
http://framework.zend.com/manual/en/zend.view.helpers.html
Zend action helpers:
http://framework.zend.com/manual/en/zend.controller.actionhelpers.html
O que eu faço se preciso de um helper e não tem disponível?
Simples, crie o seu próprio helper, basta seguir as nomenclaturas do zend framework,
extender as classes certas e pronto, a seguir vamos criar e testar um action helper e
view helper, mas antes vamos configurar nosso ambiente para receber nossos helpers.
4Gosto
Organizando nossa estrutura para os helpers
Agora vamos configurar nossa aplicaçao para que os helpers fiquem acessíveis de
toda aplicação, muito útil para quem trabalha com módulos pois os helpers ficarão
disponíveis em todos os módulos.
Primeiro vamos criar a estrutura de pastas necessária para nossa configuração, que
ficará dentro da pasta library do nosso projeto.
O resultado deve seguir a estrutura da imagem abaixo:
Estrutura de pastas
organizadas
Com essa estrutura criada, vamos configurar nossa aplicação para encontrar nossos
futuros helpers, para realizar essa configuração temos duas alternativas, configurar
pelo nosso bootstrap e a outra é configurar através do arquivo application.ini, confira
ambas alternativas a seguir, escolha uma e aplique no seu projeto.
Bootstrap.php application.ini
Adicione o método _initHelpers() no seu bootstrap principal com o seguinte
conteúdo:
12345678
/*** _initHelpers** @desc Sets alternative ways to helpers*/protected function _initHelpers(){ $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
Pronto, agora nossos helpers estão disponíveis para toda aplicação.
Criando nosso controller action helper
Vamos criar nosso action helper, que será uma classe para auxiliar na geração de
strings randômicas, o arquivo deve ser criado na pasta “ZF/Controller/Helper” com o
nome “GenerateRandom.php”, veja a seguir o conteúdo do nosso action helper e não
se assuste com seu tamanho, pois o objetivo é poder trabalhar dando mais exemplos
na hora de testar.
910111213141516
$viewRenderer->initView(); // add zend view helper path $viewRenderer->view->addHelperPath('ZF/View/Helper/'); // add zend action helper path Zend_Controller_Action_HelperBroker::addPath('ZF/Controller/Helper/'}
12345678910111213141516171819202122232425262728293031323334
<?php/** * GenerateRandom Action Helper * * @desc Cria uma string randômica * @uses Zend_Controller_Action_Helper */class Zend_Controller_Action_Helper_GenerateRandom extends Zend_Controller_Action_Helper_Abstract { /** * @var Zend_Loader_PluginLoader */ public $pluginLoader; /** * config */ private $lower = 'abcdefghijklmnopqrstuvwxyz'; private $upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; private $numbers = '1234567890'; private $simbols = '!@#$%*-'; /** * @var $characters */ private $characters; /** * @var $resultado */ private $resultado; /** * Constructor: initialize plugin loader * * @return void */
353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
public function __construct() { // TODO Auto-generated Constructor $this->pluginLoader = new Zend_Loader_PluginLoader (); } /** * generateRandom * * @desc Cria uma string randômica * @param int $length * @param boolean $uppercase * @param boolean $number * @param boolean $simbol * @return string $resultado */ public function generateCustom( $length = 8, $uppercase { $this->characters = $this->lower; if($uppercase) $this->characters .= $this->upper; if($number) $this->characters .= $this->numbers; if($simbol) $this->characters .= $this->simbols; $this->resultado = $this->generate($length); return $this->resultado; } /** * numeric * * @desc Cria uma string de números randômicos * @param int $length * @return $resultado */ public function numeric( $length = 8 ) { $this->characters = $this->numbers; $this->resultado = $this->generate($length); return $this->resultado; } /** * hardPassword * * @desc Cria uma senha forte * @param int $length * @return $resultado */ public function hardPassword( $length = 8 ) { $this->characters = $this->lower; $this->characters .= $this->simbols;
O método “direct” é responsável por chamar o método principal em caso de chamada
direta do helper.
Criando nosso view helper
Agora vamos criar nosso view helper, que será uma classe auxiliar para controlar o
tamanho dos textos que serão exibidos na camada de visão, muitas vezes precisamos
“cortar” esses textos para manter o layout agradável, o arquivo deve ser criado na
pasta “ZF/View/Helper” com o nome “Truncate.php”, veja a seguir o conteúdo do
nosso view helper.
9293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
$this->characters .= $this->upper; $this->characters .= $this->simbols; $this->characters .= $this->numbers; $this->characters .= $this->simbols; $this->resultado = $this->generate($length); return $this->resultado; } /** * generate * * @desc Gera a string baseado nos atributos da classe * @param int $length * @return $text */ private function generate( $length = 8 ) { $text = ''; $max = strlen($this->characters) - 1; for ($i = 1; $i <= $length; $i++) { $rand = rand(0, $max); $text .= $this->characters[$rand]; } return $text; } /** * Strategy pattern: call helper as broker method */ public function direct( $length = 8, $uppercase = true, { return $this->generateCustom($length, $uppercase, $number }}
1234
<?php/** * Truncate helper *
Nesse momento nossa estrutura está da seguinte forma:
567891011121314151617181920212223242526272829303132333435363738394041
* @desc Verifica e corta uma string se for necessário * @uses Zend_View_Interface */class Zend_View_Helper_Truncate { /** * @var Zend_View_Interface */ public $view; /** * @var string $text */ private $resultado; /** * trucante * * @desc Verifica e corta uma string se for necessário * @return string $text */ public function truncate( $text = '', $length = 32, $character if(strlen($text) <= $length) return $text; $this->resultado = substr($text, 0, $length-1); $this->resultado .= $character; return $this->resultado; } /** * Sets the view field * @param $view Zend_View_Interface */ public function setView(Zend_View_Interface $view) { $this->view = $view; }}
Estrutura após a criação dos
helpers
Utilizando View Helper no controller
Pode ser necessário utilizar view helpers no controller, para isso temos as seguintes
opções:
Trabalhando com os helpers no controller e na view
Com os nossos helpers prontos, vamos trabalhar, não será necessário criar controllers
e views, vamos trabalhar usando o IndexController.php e a view index.phtml.
IndexController.php
123456789101112131415
<?phpclass FooController extends Zend_Controller_Action{ public function barAction() { $this->view->helpername(/*params*/); // ou $this->_view->helpername(/*params*/); // ou $helper = $this->view->getHelper('helpername'); // ou $broker = Zend_Controller_Action_HelperBroker::getStaticHelper( $broker->getView()->helpername(/*params*/); }}
1234
<?phpclass IndexController extends Zend_Controller_Action{
index.phtml
Resultado
Ao acessar nossa aplicação, vamos obter o seguinte resultado:
Resultado do script usando helpers
As strings geradas pelo nosso action helper vão variar a cada acesso, pois são
aleatórias.
Visualizar ou efetuar download do exemplo, lembrando que no repositório desse
projeto no github não consta os arquivos do framework.
action helper, helpers, view helper, Zend Framework
567891011121314151617181920212223242526
public function indexAction() { // cria uma string randômica através do método direct apenas com letras $primaryString = $this->_helper->generateRandom(14, true, false, false); // resgata o helper, retornando uma instância do helper $helper = $this->_helper->getHelper('generateRandom' // ou $helper = $this->_helper->generateRandom; // cria um password seguro através de um dos métodos do helper $secondString = $helper->hardPassword(); // cria uma string numérica chamand o método numeric() $thirdString = $helper->numeric(10); // enviando os dados para view $this->view->assign('alphaString', $primaryString); $this->view->assign('hardPassword', $secondString); $this->view->assign('numericString', $thirdString); // enviando um texto para view $this->view->assign('text', 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus.' } }
12345
String de letras gerada pelo nosso action helper: <?php echo $this->alphaString; ?><br />Password gerado pelo nosso action helper: <?php echo $this->hardPassword; ?><br />String de numeros pelo nosso action helper: <?php echo $this->numericString; ?><br /><br />Resultado usando nosso view helper: <?php echo $this->truncate($this->text, 27); ?>
Imprimir
artigo
Este artigo foi escrito por Diogo Matheus em 02/05/2011
às 8:30, e está arquivado em Zend Framework. Siga
quaisquer respostas a este artigo através do RSS 2.0.
Você pode deixar uma resposta ou fazer um trackback do
seu próprio site.
Compartilhe
este artigo!
ARTIGOS RELACIONADOSTRACKBACKS (1)
Qual é Diogo, não tive muito sucesso com os Helpers ainda, mas vou
continuar testandom aqui.
Criei td do jeito que vc passou mas dá erro na apresentação
Batalha, qual é o problema que está ocorrendo ai exatamente?
Posso criar models com esse helper também?
O que estou querendo, é que de uma action da minha aplicação acessa
uma action de outro controle, tipo.
Na controle cliente tem uma action mostra o cliente, e alem de mostrar o
cliente gostaria de mostrar os pedidos do cliente, porem quero usar uma
action que já existe de pedidos para fazer isso, na qual a action já acessa
o banco e carrega o html.
Tem algo que possa fazer dessa forma?
#1 escrito por Batalha
há 2 anos atrás
#2 escrito por Diogo Matheus
há 2 anos atrás
#3 escrito por Fabio Davel
há 1 ano atrás
#4 escrito por Diogo Matheus
há 1 ano atrás
COMENTÁRIOS (13)
Fala Fabio,
Criar models você quer dizer instanciar models nos helpers? Se for pode
sim.
Mas para o que você está querendo fazer pode ser que os view helpers a
seguir te ajudem, são ótimos para reutilização de código, cada um com
seu propósito.
Action View Helper
http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.action
Render e Partial Helper
http://filip.forrez.net/2010/04/16/zend-framework-partial-and-render/
http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.partial
Show demais, valeu mesmo.
Olá Diogo,
Apenas sugiro para realizar duas correções neste artigo.
Na classe Bootstrap, mudar:
de: $viewRenderer->view->addHelperPath(‘ZF/View/Helper/’)
para: $viewRenderer->view->addHelperPath(‘ZF/View/Helper/’,
“ZF_View_Helper”);
de:
Zend_Controller_Action_HelperBroker::addPath(‘ZF/Controller/Helper/’);
para:
Zend_Controller_Action_HelperBroker::addPath(‘ZF/Controller/Helper/’,
“ZF_Controller_Action_Helper”);
Uma dúvida: no método __construct() na classe GenerateRandom, você
colocou:
$this->pluginLoader = new Zend_Loader_PluginLoader();
#5 escrito por Fabio Davel
há 1 ano atrás
#6 escrito por Vegetus
há 1 ano atrás
Poque você colocou isso no __construct? Se a classe é helper, ela tem que
ser helper. E se ela é plugin, ela tem que ser plugin. Neste artigo, você
misturou o helper com plugin… isso pode mesmo? Desculpe por essa
pergunta, pois eu ainda não sou expert em ZF. E não sei qual é a
vantagem de colocar isso no __construct.
Vi um artigo sobre a diferença entre Helpers e Plugins em
http://www.kitpages.fr/fr/cms/28/plugins-et-helpers-du-mvc-du-zend-
framework e acho que você vai gostar. Por isso mesmo, pergunto qual é
a vantagem de você ter colocado o Zend_Loader_PluginLoader() no
método __construct.
Obrigado e um abraço.
Olá Vegetus,
Obrigado pelas sugestões, estou refatorando os artigos aos poucos.
Quanto ao Loader no construct, neste caso não foi utilizado mas confira
no link a seguir um caso de uso:
http://devzone.zend.com/1218/action-helpers-in-zend-framework/
Os Actions Helpers realmente geram um pouco de confusão, muitos não
gostam de utilizar, principalmente criar seu próprio Action Helper, mas
um Action Helper muito importante é o FlashMessenger, que permite a
transmissão de mensagens entre requisições.
http://framework.zend.com/manual/en/#zend.controller.actionhelpers.flashmessenger
Abraço
Funcionou muito bem aqui. Valeu pelo tutorial
#7 escrito por Diogo Matheus
há 1 ano atrás
#8 escrito por Samuel Gomes Huarachi
há 1 ano atrás
#9 escrito por Diogo Matheus
há 1 ano atrás
Obrigado pelo feedback.
Muito bom!
Obrigado pelo comentário Filipe.
Olá, seus tutoriais de Zend são ótimos.
Os Helpers são muito utéis para operações repetidas, nas views e nos
controllers, mas se eu repito uma operação nos models como posso
fazer uma função generica para todos, sem fugir do mvc, como formatar
datas e outros valores para gravar no banco de dados, passo o post dos
forms do controller para o model. Sou novo em Zend então se falei
merda me corrijam.
Juan:
Olá, seus tutoriais de Zend são ótimos.
Os Helpers são muito utéis para operações
repetidas, nas views e nos controllers, mas se
eu repito uma operação nos models como
posso fazer uma função generica para todos,
sem fugir do mvc, como formatar datas e
outros valores para gravar no banco de
dados, passo o post dos forms do controller
#10 escrito por Filipe
há 1 ano atrás
#11 escrito por Diogo Matheus
há 1 ano atrás
#12 escrito por Juan
há 1 ano atrás
#13 escrito por Samuel Gomes Huarachi
há 9 meses atrás
para o model. Sou novo em Zend então se
falei merda me corrijam.
Você nao falou merda
Mas voce pode criar um model abstract. e fazer todos seus models
herdarem de model abstract…
Eu vi isso num curso da SON (zfday3 que é muito bom por sinal!!!)
Nome (obrigatório)
E-mail (obrigatório, não será publicado)
Website
Enviar Comentário
CERTIFICAÇÕES
PESQUISAR
Pesquisar
TWEETS RECENTES
Certificações (1)
Eventos (3)
Gerenciamento de Projetos
(4)
jQuery (2)
Orientação a Objetos (3)
PHP (22)
Resenha (5)
Ubuntu (1)
XHTML & CSS (1)
Zend Framework (13)
Creative Commons 3.0 RSS Topo
saiadolugar.com.br/empreendedoris
Diogo Matheus @dmmatheus
Proposta de monografia entregue, agora é planejar e escrever.
Diogo Matheus @dmmatheus
exame.abril.com.br/revista-exame/…
Diogo Matheus @dmmatheus
Show Summary
Estou devendo uma resenha sobre o livro de persuasão, até final de semana que vem faço essa brincadeira.
Diogo Matheus @dmmatheus
Diogo Matheus
31 Jan
25 Jan
8 Jan
4 Jan
4 Jan
Tweets Follow
Tweet to @dmmatheus
ÚLTIMOS TÓPICOS
Virtual Hosts no Ubuntu
A Startup Enxuta
Entendendo casting implício e
explícito
Estrutura Analítica do Projeto (EAP)
Orientação a Interfaces