15
« 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. 4 Gosto

Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

Embed Size (px)

Citation preview

Page 1: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

« 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

Page 2: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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(

Page 3: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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 */

Page 4: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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;

Page 5: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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 *

Page 6: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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; }}

Page 7: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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{

Page 8: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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); ?>

Page 9: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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)

Page 10: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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

Page 11: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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

Page 12: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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

Page 13: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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

Page 15: Zend View Helpers e Zend Action Helpers _ Diogo Matheus Blog

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