Escolar Documentos
Profissional Documentos
Cultura Documentos
Organizando nossa estrutura para os helpers Agora vamos configurar nossa aplicaao para que os helpers fiquem acessveis de toda aplicao, muito til para quem trabalha com mdulos pois os helpers ficaro disponveis em todos os mdulos. Primeiro vamos criar a estrutura de pastas necessria para nossa configurao, 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 aplicao para encontrar nossos futuros helpers, para realizar essa configurao temos duas alternativas, configurar pelo nosso bootstrap e a outra configurar atravs do arquivo application.ini, confira ambas alternativas a seguir, escolha uma e aplique no seu projeto. Bootstrap.php application.ini
/ * * *_ i n i t H e l p e r s * *@ d e s cS e t sa l t e r n a t i v ew a y st oh e l p e r s * / p r o t e c t e df u n c t i o n_ i n i t H e l p e r s ( ) { $ v i e w R e n d e r e r=Z e n d _ C o n t r o l l e r _ A c t i o n _ H e l p e r B r o k e r : : g e t S t a t i c H e l p
9 1 0 1 1 1 2 1 3 1 4 1 5 1 6
/ /a d dz e n da c t i o nh e l p e rp a t h Z e n d _ C o n t r o l l e r _ A c t i o n _ H e l p e r B r o k e r : : a d d P a t h ( ' Z F / C o n t r o l l e r / H e l p e r
Pronto, agora nossos helpers esto disponveis para toda aplicao. Criando nosso controller action helper Vamos criar nosso action helper, que ser uma classe para auxiliar na gerao de strings randmicas, o arquivo deve ser criado na pasta ZF/Controller/Helper com o nome GenerateRandom.php, veja a seguir o contedo do nosso action helper e no se assuste com seu tamanho, pois o objetivo poder trabalhar dando mais exemplos na hora de testar. 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 < ? p h p / * * *G e n e r a t e R a n d o mA c t i o nH e l p e r * *@ d e s cC r i au m as t r i n gr a n d m i c a *@ u s e sZ e n d _ C o n t r o l l e r _ A c t i o n _ H e l p e r * / c l a s sZ e n d _ C o n t r o l l e r _ A c t i o n _ H e l p e r _ G e n e r a t e R a n d o m e x t e n d sZ e n d _ C o n t r o l l e r _ A c t i o n _ H e l p e r _ A b s t r a c t{ / * * *@ v a rZ e n d _ L o a d e r _ P l u g i n L o a d e r * / p u b l i c$ p l u g i n L o a d e r ; / * * *c o n f i g * / p r i v a t e$ l o w e r=' a b c d e f g h i j k l m n o p q r s t u v w x y z ' ; p r i v a t e$ u p p e r=' A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ' ; p r i v a t e$ n u m b e r s=' 1 2 3 4 5 6 7 8 9 0 ' ; p r i v a t e$ s i m b o l s=' ! @ # $ % * ' ; / * * *@ v a r$ c h a r a c t e r s * / p r i v a t e$ c h a r a c t e r s ; / * * *@ v a r$ r e s u l t a d o * / p r i v a t e$ r e s u l t a d o ; / * * *C o n s t r u c t o r :i n i t i a l i z ep l u g i nl o a d e r * *@ r e t u r nv o i d * /
3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 9 0 9 1
p u b l i cf u n c t i o n_ _ c o n s t r u c t ( ){ / /T O D OA u t o g e n e r a t e dC o n s t r u c t o r $ t h i s > p l u g i n L o a d e r=n e wZ e n d _ L o a d e r _ P l u g i n L o a d e r( ) ; } / * * *g e n e r a t e R a n d o m * *@ d e s cC r i au m as t r i n gr a n d m i c a *@ p a r a mi n t$ l e n g t h *@ p a r a mb o o l e a n$ u p p e r c a s e *@ p a r a mb o o l e a n$ n u m b e r *@ p a r a mb o o l e a n$ s i m b o l *@ r e t u r ns t r i n g$ r e s u l t a d o * / p u b l i cf u n c t i o ng e n e r a t e C u s t o m ($ l e n g t h=8 ,$ u p p e r c a s e { $ t h i s > c h a r a c t e r s=$ t h i s > l o w e r ; i f ( $ u p p e r c a s e ) $ t h i s > c h a r a c t e r s. =$ t h i s > u p p e r ; i f ( $ n u m b e r ) $ t h i s > c h a r a c t e r s. =$ t h i s > n u m b e r s ; i f ( $ s i m b o l ) $ t h i s > c h a r a c t e r s. =$ t h i s > s i m b o l s ; $ t h i s > r e s u l t a d o=$ t h i s > g e n e r a t e ( $ l e n g t h ) ; } r e t u r n$ t h i s > r e s u l t a d o ;
9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 1 0 0 1 0 1 1 0 2 1 0 3 1 0 4 1 0 5 1 0 6 1 0 7 1 0 8 1 0 9 1 1 0 1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 2 0 1 2 1 1 2 2 1 2 3 1 2 4 1 2 5 1 2 6 1 2 7 1 2 8
$ t h i s > c h a r a c t e r s. =$ t h i s > u p p e r ; $ t h i s > c h a r a c t e r s. =$ t h i s > s i m b o l s ; $ t h i s > c h a r a c t e r s. =$ t h i s > n u m b e r s ; $ t h i s > c h a r a c t e r s. =$ t h i s > s i m b o l s ; $ t h i s > r e s u l t a d o=$ t h i s > g e n e r a t e ( $ l e n g t h ) ; } r e t u r n$ t h i s > r e s u l t a d o ;
/ * * *g e n e r a t e * *@ d e s cG e r aas t r i n gb a s e a d on o sa t r i b u t o sd ac l a s s e *@ p a r a mi n t$ l e n g t h *@ r e t u r n$ t e x t * / p r i v a t ef u n c t i o ng e n e r a t e ($ l e n g t h=8) { $ t e x t=' ' ; $ m a x=s t r l e n ( $ t h i s > c h a r a c t e r s )-1 ; f o r( $ i=1 ;$ i< =$ l e n g t h ;$ i + + ){ $ r a n d=r a n d ( 0 ,$ m a x ) ; $ t e x t. =$ t h i s > c h a r a c t e r s [ $ r a n d ] ; } } r e t u r n$ t e x t ;
O mtodo direct responsvel por chamar o mtodo 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 sero exibidos na camada de viso, muitas vezes precisamos cortar esses textos para manter o layout agradvel, o arquivo deve ser criado na pasta ZF/View/Helper com o nome Truncate.php, veja a seguir o contedo do nosso view helper. 1 2 3 4 < ? p h p / * * *T r u n c a t eh e l p e r *
5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1
*@ d e s cV e r i f i c aec o r t au m as t r i n gs ef o rn e c e s s r i o *@ u s e sZ e n d _ V i e w _ I n t e r f a c e * / c l a s sZ e n d _ V i e w _ H e l p e r _ T r u n c a t e{ / * * *@ v a rZ e n d _ V i e w _ I n t e r f a c e * / p u b l i c$ v i e w ; / * * *@ v a r s t r i n g$ t e x t * / p r i v a t e$ r e s u l t a d o ; / * * *t r u c a n t e * *@ d e s cV e r i f i c aec o r t au m as t r i n gs ef o rn e c e s s r i o *@ r e t u r ns t r i n g$ t e x t * / p u b l i cf u n c t i o nt r u n c a t e ($ t e x t=' ' ,$ l e n g t h=3 2 ,$ c h a r a c t e r i f ( s t r l e n ( $ t e x t )< =$ l e n g t h ) r e t u r n$ t e x t ; $ t h i s > r e s u l t a d o =s u b s t r ( $ t e x t ,0 ,$ l e n g t h 1 ) ; $ t h i s > r e s u l t a d o. =$ c h a r a c t e r ; r e t u r n$ t h i s > r e s u l t a d o ; } / * * *S e t st h ev i e wf i e l d *@ p a r a m$ v i e wZ e n d _ V i e w _ I n t e r f a c e * / p u b l i cf u n c t i o ns e t V i e w ( Z e n d _ V i e w _ I n t e r f a c e$ v i e w ){ $ t h i s > v i e w=$ v i e w ; }
Estrutura aps a criao dos helpers Utilizando View Helper no controller Pode ser necessrio utilizar view helpers no controller, para isso temos as seguintes opes: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5
< ? p h p c l a s sF o o C o n t r o l l e re x t e n d sZ e n d _ C o n t r o l l e r _ A c t i o n { p u b l i cf u n c t i o nb a r A c t i o n ( ) { $ t h i s > v i e w > h e l p e r n a m e ( / * p a r a m s * / ) ; / /o u $ t h i s > _ v i e w > h e l p e r n a m e ( / * p a r a m s * / ) ; / /o u $ h e l p e r=$ t h i s > v i e w > g e t H e l p e r ( ' h e l p e r n a m e ' ) ; / /o u $ b r o k e r=Z e n d _ C o n t r o l l e r _ A c t i o n _ H e l p e r B r o k e r : : g e t S t a t i c H e l p e r ( $ b r o k e r > g e t V i e w ( ) > h e l p e r n a m e ( / * p a r a m s * / ) ; } }
Trabalhando com os helpers no controller e na view Com os nossos helpers prontos, vamos trabalhar, no ser necessrio criar controllers e views, vamos trabalhar usando o IndexController.php e a view index.phtml. IndexController.php 1 2 3 4 < ? p h p c l a s sI n d e x C o n t r o l l e re x t e n d sZ e n d _ C o n t r o l l e r _ A c t i o n {
5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6
/ /r e s g a t aoh e l p e r ,r e t o r n a n d ou m ai n s t n c i ad oh e l p e r $ h e l p e r=$ t h i s > _ h e l p e r > g e t H e l p e r ( ' g e n e r a t e R a n d o m ' / /o u$ h e l p e r=$ t h i s > _ h e l p e r > g e n e r a t e R a n d o m ; / /c r i au mp a s s w o r ds e g u r oa t r a v sd eu md o sm t o d o sd oh e l p e r $ s e c o n d S t r i n g=$ h e l p e r > h a r d P a s s w o r d ( ) ; / /c r i au m as t r i n gn u m r i c ac h a m a n dom t o d on u m e r i c ( ) $ t h i r d S t r i n g=$ h e l p e r > n u m e r i c ( 1 0 ) ;
} }
/ /e n v i a n d oo sd a d o sp a r av i e w $ t h i s > v i e w > a s s i g n ( ' a l p h a S t r i n g ' ,$ p r i m a r y S t r i n g ) ; $ t h i s > v i e w > a s s i g n ( ' h a r d P a s s w o r d ' ,$ s e c o n d S t r i n g ) ; $ t h i s > v i e w > a s s i g n ( ' n u m e r i c S t r i n g ' ,$ t h i r d S t r i n g ) ; / /e n v i a n d ou mt e x t op a r av i e w $ t h i s > v i e w > a s s i g n ( ' t e x t ' ,' L o r e mi p s u md o l o rs i ta m e t ,c o n s e c
index.phtml 1 2 3 4 5
S t r i n gd el e t r a sg e r a d ap e l on o s s oa c t i o nh e l p e r :< ? p h pe c h o$ t h i s > a l p h P a s s w o r dg e r a d op e l on o s s oa c t i o nh e l p e r :< ? p h pe c h o$ t h i s > h a r d P a s s w o r d S t r i n gd en u m e r o sp e l on o s s oa c t i o nh e l p e r :< ? p h pe c h o$ t h i s > n u m e r i c S t r < b r/ > R e s u l t a d ou s a n d on o s s ov i e wh e l p e r :< ? p h pe c h o$ t h i s > t r u n c a t e ( $ t h i s > t e
Resultado do script usando helpers As strings geradas pelo nosso action helper vo variar a cada acesso, pois so aleatrias. Visualizar ou efetuar download do exemplo, lembrando que no repositrio desse projeto no github no consta os arquivos do framework. action helper, helpers, view helper, Zend Framework
Este artigo foi escrito por Diogo Matheus em 02/05/2011 Compartilhe este artigo! Imprimir s 8:30, e est arquivado em Zend Framework. Siga artigo quaisquer respostas a este artigo atravs do RSS 2.0. Voc pode deixar uma resposta ou fazer um trackback do seu prprio site.
COMENTRIOS (13)
TRACKBACKS (1)
ARTIGOS RELACIONADOS
#1 escrito por Batalha h 2 anos atrs Qual Diogo, no tive muito sucesso com os Helpers ainda, mas vou continuar testandom aqui. Criei td do jeito que vc passou mas d erro na apresentao #2 escrito por Diogo Matheus h 2 anos atrs Batalha, qual o problema que est ocorrendo ai exatamente? #3 escrito por Fabio Davel h 1 ano atrs Posso criar models com esse helper tambm? O que estou querendo, que de uma action da minha aplicao 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? #4 escrito por Diogo Matheus h 1 ano atrs
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, so timos para reutilizao de cdigo, cada um com seu propsito.
http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.p #5 escrito por Fabio Davel h 1 ano atrs Show demais, valeu mesmo. #6 escrito por Vegetus h 1 ano atrs Ol Diogo, Apenas sugiro para realizar duas correes 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 dvida: no mtodo __construct() na classe GenerateRandom, voc colocou: $this->pluginLoader = new Zend_Loader_PluginLoader();
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 no sou expert em ZF. E no sei qual a vantagem de colocar isso no __construct. Vi um artigo sobre a diferena entre Helpers e Plugins em http://www.kitpages.fr/fr/cms/28/plugins-et-helpers-du-mvc-du-zendframework e acho que voc vai gostar. Por isso mesmo, pergunto qual a vantagem de voc ter colocado o Zend_Loader_PluginLoader() no mtodo __construct. Obrigado e um abrao. #7 escrito por Diogo Matheus h 1 ano atrs Ol Vegetus, Obrigado pelas sugestes, estou refatorando os artigos aos poucos. Quanto ao Loader no construct, neste caso no 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 confuso, muitos no gostam de utilizar, principalmente criar seu prprio Action Helper, mas um Action Helper muito importante o FlashMessenger, que permite a transmisso de mensagens entre requisies. http://framework.zend.com/manual/en/#zend.controller.actionhelpers.flashmessenger Abrao #8 escrito por Samuel Gomes Huarachi h 1 ano atrs Funcionou muito bem aqui. Valeu pelo tutorial #9 escrito por Diogo Matheus h 1 ano atrs
Obrigado pelo feedback. #10 escrito por Filipe h 1 ano atrs Muito bom! #11 escrito por Diogo Matheus h 1 ano atrs Obrigado pelo comentrio Filipe. #12 escrito por Juan h 1 ano atrs Ol, seus tutoriais de Zend so timos. Os Helpers so muito utis para operaes repetidas, nas views e nos controllers, mas se eu repito uma operao nos models como posso fazer uma funo 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 ento se falei merda me corrijam. #13 escrito por Samuel Gomes Huarachi h 9 meses atrs
Juan: Ol, seus tutoriais de Zend so timos. Os Helpers so muito utis para operaes repetidas, nas views e nos controllers, mas se eu repito uma operao nos models como posso fazer uma funo 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
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!!!)
Enviar Comentrio
CERTIFICAES
PESQUISAR
Pesquisar
Certificaes (1) Eventos (3) Gerenciamento de Projetos (4) jQuery (2) Orientao a Objetos (3) PHP (22) Resenha (5) Ubuntu (1) XHTML & CSS (1) Zend Framework (13)
TWEETS RECENTES
Tweets
Follow
Diogo Matheus 31 Jan @dmmatheus saiadolugar.com.br/empreendedoris Diogo Matheus 25 Jan @dmmatheus Proposta de monografia entregue, agora planejar e escrever. Diogo Matheus 8 Jan @dmmatheus exame.abril.com.br/revista-exame/ Show Summary Diogo Matheus 4 Jan @dmmatheus Estou devendo uma resenha sobre o livro de persuaso, at final de semana que vem fao essa brincadeira. Diogo Matheus Tweet to @dmmatheus 4 Jan
LTIMOS TPICOS
Virtual Hosts no Ubuntu A Startup Enxuta Entendendo casting implcio e explcito Estrutura Analtica do Projeto (EAP) Orientao a Interfaces
RSS
Topo