Você está na página 1de 15

Configurando o PHP para enviar email no windows atravs do gmail

Entendendo modelos no zend framework

Zend View Helpers e Zend Action Helpers


Gosto 4 Tweet 2 0 3 Helpers so classes auxiliares que tem como objetivo simplificar o cdigo tanto na view quanto no controller, simplificar de que forma? Se por acaso for necessrio gerar strings randmicas personalizadas no controller, ao invs de criar uma funo em todo controller que precisar de uma string randmica, podemos criar um action helper que abstraia essa tarefa e fique disponvel em todos os controllers, mas e se eu precisar de uma funo que limite o tamanho de um texto a ser exibido na minha view? criamos ento um view helper para auxiliar nessa tarefa, analisando e cortando o texto se necessrio, ficando disponvel para todas as views, para obter o resultado esperado chamamos uma funo com o nome do helper. Qual a diferena entre view helpers e action helpers? Caso ainda no tenha ficado claro, a diferena que os view helpers auxiliam nossa camada de viso, nossas views, j os action helpers auxiliam nossos controllers. Ambos so chamados como uma funo direta e podem receber parmetros, mas os actions helpers vo alm permitindo que sejam instanciados, podendo assim serem manipulados como uma instncia de classe, chamando mtodos e etc, esse conceito ser melhor compreendido na parte final do tutorial onde vamos trabalhar com os helpers. Quais helpers esto disponveis no zend framework? Na documentao do zend framework conseguimos ver os helpers disponveis, 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 fao se preciso de um helper e no tem disponvel? Simples, crie o seu prprio 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.

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

Adicione o mtodo _initHelpers() no seu bootstrap principal com o seguinte contedo: 1 2 3 4 5 6 7 8

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

$ v i e w R e n d e r e r > i n i t V i e w ( ) ; / /a d dz e n dv i e wh e l p e rp a t h $ v i e w R e n d e r e r > v i e w > a d d H e l p e r P a t h ( ' Z F / V i e w / H e l p e r / ' ) ;

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

/ * * *n u m e r i c * *@ d e s cC r i au m as t r i n gd en m e r o sr a n d m i c o s *@ p a r a mi n t$ l e n g t h *@ r e t u r n$ r e s u l t a d o * / p u b l i cf u n c t i o nn u m e r i c ($ l e n g t h=8) { $ 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 > 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 ;

/ * * *h a r d P a s s w o r d * *@ d e s cC r i au m as e n h af o r t e *@ p a r a mi n t$ l e n g t h *@ r e t u r n$ r e s u l t a d o * / p u b l i cf u n c t i o nh a r d P a s s w o r d ($ l e n g t h=8) { $ t h i s > c h a r a c t e r s=$ t h i s > l o w 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 ;

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 ;

/ * * *S t r a t e g yp a t t e r n :c a l lh e l p e ra sb r o k e rm e t h o d * / p u b l i cf u n c t i o nd i r e c t ($ l e n g t h=8 ,$ u p p e r c a s e=t r u e , { r e t u r n$ t h i s > g e n e r a t e C u s t o m ( $ l e n g t h ,$ u p p e r c a s e ,$ n u m b e r }

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

Nesse momento nossa estrutura est da seguinte forma:

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

p u b l i cf u n c t i o ni n d e x A c t i o n ( ) { / /c r i au m as t r i n gr a n d m i c aa t r a v sd om t o d od i r e c ta p e n a sc o $ p r i m a r y S t r i n g=$ t h i s > _ h e l p e r > g e n e r a t e R a n d o m ( 1 4 ,t r u e ,f a l s e

/ /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 Ao acessar nossa aplicao, vamos obter o seguinte resultado:

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.

Action View Helper http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.ac 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.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

para o model. Sou novo em Zend ento 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 (obrigatrio) E-mail (obrigatrio, no ser publicado) Website

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

Creative Commons 3.0

RSS

Topo

Você também pode gostar