SlideShare uma empresa Scribd logo
1 de 67
Baixar para ler offline
Zend Framework + PDT
             Introdução




                    http://www.fgsl.eti.br 



                                         
    É permitida a reprodução parcial ou total desde que citada a fonte
Sobre o que falarei?


● Quem sou eu?
● Provocação

● Motivação

● O que é Zend Framework?

● Por que Zend Framework?

● Ferramenta: Eclipse + Plugin PDT

● Introdução ao MVC do ZF

● Introdução a formulários dinâmicos




                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Flávio Lisboa


● Trabalha no SERPRO, Serviço Federal de 
  Processamento de Dados. 
● Trabalhou no Projeto de Internalização do PHP 


  no SERPRO, definindo padrões, elaborando e 
  ministrando treinamentos e finalmente avaliando 
  e indicando um framework padrão.
● Tradução de capítulos do ZF.

● Livro: Zend Framework




                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Provocação

PHP é muito fácil!

Para que tutorial? Para que treinamento?

Não preciso de orientação a objetos, muito menos 
 de frameworks!

Para que convenções, padrões de codificação, 
 padrões de projeto e essas besteiras todas?
                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Provocação

                       O 
                  IMPORTANTE 
                     É QUE 
                   FUNCIONA!




                 Iron Man, created by Stan Lee 
                 and Don Heck.
                 Marvel Comics All Rights 
                 Reserved.
Provocação
                                                                 FAZ O QUE 
                                                                  TEM QUE 
                                                                FAZER, NÃO 
                                                                    FAZ?




                                              
    Iron Man, created by Stan Lee and Don Heck. Marvel Comics All Rights Reserved.
Motivação




    Dilbert created by Scott Adams. All Rights Reserved.


                               
Motivação




    Dilbert created by Scott Adams. All Rights Reserved.


                               
Motivação
                                                     PENSE
                                                      NO
                                                    FUTURO!




Joker created by Bob Kane. DC Comics All Reserved
                                            
Motivação

                   “As coisas devem ser feitas tão simples 
                   quanto  for  possível,  mas  não  de  forma 
                   simplista.

                   Albert Einstein


● Simples é mais fácil de usar.
● Simples é mais estável, e menos propenso a 


  erros.
● Simples é mais compatível.

● Simples é mais fácil de manter.




                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Motivação
                                              Não seria maravilhoso se 
                                              todos os programadores 
                                                   PHP do mundo 
                                                trabalhassem de uma 
                                               forma padronizada, de 
                                                modo que pudessem 
                                                  compartilhar seus 
                                              componentes e reutilizar 
                                                milhares de linhas de 
                                                    código fonte?

                                               Deve ser um sonho...




    O´Reilly Media All rights reserved.    
O que é Zend Framework?


● É um framework “self­service”: use o que você 
  precisa
● Fracamente acoplado

● Fácil integração com qualquer outro framework

● Só PHP 5

● Disponível em http://framework.zend.com 




                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Amigável... para negócios


● Todo código licenciado sob new BSD (livre 
  mesmo!)
● CLA – Requerido para contribuição, mas evita 


  problemas de roubo de propriedade industrial
● Certificação oficial

● Mantido ativamente pela Zend




                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Por que usar Zend Framework?

                                                       SIMPLICIDADE, 
                                                        CONHEÇA O 
                                                          PODER!




                                           
Iron Man, created by Stan Lee and Don Heck. Marvel Comics All Rights Reserved.
Por que usar Zend Framework?


● Simples, porém poderoso!
● Toda a parte incômoda dos bits já está feita!

● Projeto moderno: PHP 5, OO

● Resolve 80% do espaço de problema

● Flexível e configurável para os 20% restantes

● Comprometido em minimizar quebras no 


  controle de negócios

                                         
      É permitida a reprodução parcial ou total desde que citada a fonte
Arquitetura

 É um framework, não apenas componentes
    “Cola” para construir aplicações
    ●

  ● Ferramenta para incrementar a produtividade

  ● Componentes desenvolvidos e testados juntos


 Use somente o que você precisa, mas
  ● Ele sempre será distribuido em sua totalidade

  ● Atualização feita sempre em um clique.


 Ainda  trabalha  com  outros  (PEAR,  Smarty, 
  etc)
                                           
        É permitida a reprodução parcial ou total desde que citada a fonte
Arquitetura




                                      

    Dengeki Sentai Changeman. Toei Company Limited. All Rights Reserved
Arquitetura




          
O que há no Zend Framework?


● Model­View­Controller
● Dados: banco de dados, JSON, PDF, busca

● I18n: localização, tradução, data, moeda

● Web services: consumo e disponibilização

● Serviços de infra­estrutura: autenticação, listas 


  de controle de acesso, cache, config, log, mail, 
  session

                                         
      É permitida a reprodução parcial ou total desde que citada a fonte
Processo de Desenvolvimento



● Estrita  aderência  aos  Padrões  de  Codificação 
  Zend.
● Todas  as  classes  completamente  testadas  com 


  PHPUnit.
● Revisão por pares e aprovação de todo código.




                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Recursos disponíveis


● Documentação on­line
● Comunidade

● Fóruns, listas de discussão, IRC (#zftalk)


www.zfbrasil.com 
● Livros disponíveis

● Modelo de negócio de software livre: projeto com 


  apoio de grandes empresas

                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Depoimentos
                   bwin Games AB, subsidiária da bwin Interactive Entertainment AG

Desafio: Modernizar uma aplicação PHP 4 complexa 
                 e de alto­tráfico

Para  nós  um  framework  MVC  foi  um  fator  crítico,  mas 
também  foi  ótimo  ver  que  Zend  Framework  tinha  muito 
mais  características  robustas  com  as  quais  poderíamos 
crescer,  incluindo  um  excelente  suporte  para 
internacionalização.

Marcus Eriksson
Líder Desenvolvedor
                                         
      É permitida a reprodução parcial ou total desde que citada a fonte
Depoimentos
                                   Desafios: 

 Necessidade  que  os  componentes  PHP  que  eles 
tinham  construído  fossem  amplamente  reutilizados 
na IBM;

 Necessidade de suportar múltiplos bancos de dados 
facilmente;

Necessidade  de  um  framework  limpo,  confiável  e 
suportado pela comunidade;

 
    Não  inventar  um  novo  framework,  mesmo  a  IBM 
                               
         É permitida a reprodução parcial ou total desde que citada a fonte
Depoimentos



Zend Framework era focado justamente nas áreas certas 
para nós. Nosso time ganhou muito tempo e economizou 
esforço  usando  os  blocos  de  construção  do  Zend 
Framework em nosso projeto QEDWiki*.

Stewart Nickolas
Arquiteto Líder

* QEDWiki é uma aplicação Web 2.0
                           
      É permitida a reprodução parcial ou total desde que citada a fonte
Depoimentos
                     IGN Entertainment, divisão da Fox Interactive Media




       Desafios: Construir uma plataforma de longa 
    duração, usando as melhores práticas e padrões de 
     projeto para melhorar aplicações e a performance 
          para a rede de sites da comunidade IGN.


                                           
        É permitida a reprodução parcial ou total desde que citada a fonte
Depoimentos
                   IGN Entertainment, divisão da Fox Interactive Media




Zend  Framework  é  incrivelmente  efetivo  para  a  IGN 
porque  ele  não  impõe  sua  estrutura  e  permite  que  nós 
tomemos nossas próprias decisões arquiteturais.

Tony Ford
Gerente de Engenharia

                                         
      É permitida a reprodução parcial ou total desde que citada a fonte
Depoimentos
                            Indianapolis Motor Speedway




Desafios:  Outras  bibliotecas  eram  muito  difíceis  de 
instalar,  desenvolver,  estender  e  distribuir  e  eles 
ainda queriam maior performance dos sites que eles 
administravam.




                                         
      É permitida a reprodução parcial ou total desde que citada a fonte
Depoimentos
                            Indianapolis Motor Speedway




Tivemos uma queda de 20% no tempo de carregamento 
das  páginas  desde  que  começamos  a  usar  Zend 
Framework. Isso é significativo para sites de alto tráfego 
como os nossos.

Jon Whitcraft
Líder Desenvolvedor de Aplicações

                                         
      É permitida a reprodução parcial ou total desde que citada a fonte
Depoimentos
                             Plataforma de e­Commerce de código aberto


Desafios: 

 O  custo  associado  com                      treinamento           de     novos 
desenvolvedores era muito alto.

 Suportar seu próprio framework caseiro sem o conhecimento 
de uma comunidade open­source estava provando ser difícil

 Necessidade  de  um  “framework  profissional  que  tivesse 
suporte”, uma empresa por trás para a qual os contribuidores 
Magento pudessem se dirigir para suporte.
                                          
       É permitida a reprodução parcial ou total desde que citada a fonte
Depoimentos
                            Plataforma de e­Commerce de código aberto



Com  quase  meio  milhão  de  downloads  de  Magento, 
traduções em mais de 60 línguas, comunidade de 30 mil 
membros,  mais  de  70  parceiros,  e  com  mais  de  150 
extensões  Magento  Connect  escritas,  a  plataforma 
Magento  eCommerce  alcançou  claramente  um  sucesso 
agressivo e dirige um número significativo de transações 
web comerciais. 

Roy Rubin
CEO
                                         
      É permitida a reprodução parcial ou total desde que citada a fonte
Ferramenta



Plugin PDT (PHP Development Tools)

Plugin para a plataforma Eclipse
http://www.eclipse.org/pdt/ 

Recomendação:  Eclipse  Europa  3.3.2  (porque 
 garanto que a versão 1.0.3  do PDT funciona)
                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Ferramenta




Release 2.0 prometido para 29/12/2008

Funcionará no Eclipse Ganymede



                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Fluxo MVC do ZF




                                       
    É permitida a reprodução parcial ou total desde que citada a fonte
MVC
Modelo
Tudo  o  que  é  usado  pela  aplicação  para  fazer 
 algo de útil: dados, web services, feeds, etc.

Visão
A página devolvida para o usuário.

Controlador
Gerencia  o ambiente de requisição e determina o 
 que acontece.
                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Interações MVC
Controlador <­> Visão
O Controlador e a Visão podem interagir.

Controlador <­> Modelo
O Controlador pode puxar dados do modelo para 
 decidir algo, ou empurrar dados para o modelo.

View <­ Modelo
A  Visão  pode  acessar  o  modelo  para  recuperar 
 dados, mas não pode gravar nele.
                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
MVC




          Letra C: 
       Zend_Controller

                                       
    É permitida a reprodução parcial ou total desde que citada a fonte
Front Controller




                                       
    É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Front


A  classe  Zend_Controller_Front  implementa  o 
  padrão de projeto Front Controller.
Esse padrão prevê um objeto que:
● Manipula todas as requisições.

● Delega  requisições  para  os  'Page  Controllers' 


  manipular.
● Devolve a resposta. 




                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Front: Responsabilidades


Objeto  Request:  contém  todas  as  informações 
 sobre o ambiente de requisição.
Objeto Router: decompõe o ambiente  em  vários 
 tokens  representando  o  módulo,  controlador  e 
 ação atuais.
Objeto  Dispatcher:  mapeia  os  tokens  de 
 roteamento  para  as  classes  controladoras  de 
 ação e métodos, e executa­os.
Objeto Response: contém a resposta completa e 
 tem a habilidade para enviá­la.
                                          
       É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Front: Diagrama de Processo




                                       
    É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Front: Laço Despachante

   Método  dispatch()  manipula  a  entrada  de 
    requisições
   Instancia  objetos  de  requisição  e  resposta  se  não 
    foram previamente configurados.
   Requisita rotas.
   Entra em um laço despachante
    ● Ação de despacho

       Instancia o controlador de ação

       Chama o método de ação

    ● Despacha até que o objeto de requisição não reporte 


      mais ações a serem despachadas.
   Retorna resposta (envia por padrão)
                                            
         É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Front: Roteamento




Roteamento Padrão:
 /controller/action

 /controller/action/key1/value1/key2/value2

 /module/controller/action

 /module/controller/action/key1/value1/...




Outras rotas podem ser configuradas

                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Front: Roteamento


Modificando o roteamento: Reescreva o roteador:
 Zend_Controller_Router_Rewrite é a implementação 


  de roteador padrão
 Permite  a  anexação  de  tantas  rotas  nomeadas 


  quanto se desejar
  ● Rotas  nomeadas  permitem  empurrar  rotas  para 


    operações  posteriores,  tais  como  montagem  de  URL 
    ou determinar o que se casa com uma URL
 Rotas são executadas em ordem LIFO

 A  interface  Route  permite  a  definição  de  seus 



 
  próprios tipos de rota para suas aplicações
                                
      É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Front: Roteamento




Criando uma nova rota:
• Quero casar isso:
  /news/view/12
• Rota:
  /news/view/:id




                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Front: Roteamento

     $defaults = array(
                    'controller'  => 'news',
                    'action'    => 'view'
     );
     $requirement = array(
                    'id' => 'd+', // permite 1 ou + dígitos
     );

      $route = new Zend_Controller_Router_Route('news/view/:id',
$defaults,$requirement);

     // Zend_Controller_Router_Rewrite
     $router = $frontController­>getRouter();

     $router­>addRoute('newsItem',$route);

     $frontController­>setRouter($router);
                                           
        É permitida a reprodução parcial ou total desde que citada a fonte
Page Controller
Zend_Controller_Action implementa o padrão de projeto 
Page Controller.




                                          
       É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Action: Básico


Action Controllers:
 Classes simples que estendem Zend_Controller_Action

 O nome da classe termina em 'Controller'

  ● IndexController

  ● BlogController

 CamelCasing permitido

  ● FooBarController

  ● Separa palavras CamelCased em URLs com '­' (hífen)

     foo­bar




                                         
      É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Action: Básico


Controllers Actions:
 Método que o Action Controller deve executar

 Métodos públicos que terminam em 'Action'

  ● barAction

  ● indexAction

 CamelCasing permitido

  ● fooBarAction()

  ● Separa palavras CamelCased em URLs com '­' (hífen)

     foo­bar




                                         
      É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Action: Básico



O  Controlador  de  Ação  está  preparado  para  tratar  os 
  seguintes eventos:
 init(): instanciação do objeto

 preDispatch(): antes que a ação seja despachada.

 postDispatch(): depois que a ação foi executada.




                                         
      É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Action: Básico

Métodos utilitários:
● _forward($action,$controller  =  null,  $module  =  null, 


  array $params = null): desvia o processamento para outra 
  ação.
● _redirect($url): redireciona para outra URL.

● render($action,$name,$noController): renderiza um script 


  de visão alternativo.
● _call($method,      $params):  usado  para  criar  ações 
  'dinâmicas'  ou  internamente  para  desviar  para  uma  ação 
  padrão.

                                          
       É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Action: Básico
ViewRenderer

● A integração com a Visão está disponível automaticamente
● Registrado pelo action helper ViewRenderer

● Pode ser desabilitado

● A  propriedade    $view  do  controlador  contém  um  objeto  de 


  visão
● Associa variáveis à visão:


  $this­>view­>model = $model;

Pode ser obtido assim:
Zend_Controller_Action_HelperBroker::getStaticHelper('view
 Renderer')
                                          
       É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Action: Básico

   View  scripts  são  renderizados  automaticamente 
    durante o evento postDispatch()
   View  scripts  são  nomeados  de  acordo  com  o 
    controlador e a ação:
    ● FooController::barAction() renderiza foo/bar.phtml

    ● NewsController::listAction() renderiza news/list.phtml

   Desabilitando o ViewRenderer
    ● setNoRender() o desabilitará para a ação atual

    ● Chamar    _forward()  ou  _redirect()  nunca  renderiza 
      automaticamente

                                            
         É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Action: Básico

Customizando o ViewRenderer:
 setView()

   Configura  o  objeto  de  Visão  (permite  implementaçoes 


    customizadas de visão!)
 setViewSuffix()

   Altera o sufixo de arquivo usado

 setView(Base|Script)PathSpec()

   Configura  a  especificação  de  caminho  usada  para 


    autodeterminação do local das visões
 setResponseSegment()

   Configura  o  segmento  de  resposta  nomeado  para  o  qual 


    renderizar
                                          
       É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Controller_Action: Básico
Módulos:
 Um  conjunto  de  controladores  de  ação,  modelos  e 


  visões relacionados.
 Estrutura  de  diretórios  mimetiza  estrutura  de  diretório 


  de application:
  ● controllers

  ● models

  ● views

 Nomes  de  classes  controladoras  devem  ser  prefixadas 


  com o nome do módulo:
  Foo_ViewController­>foo/controllers/ViewController.php
 Nomes  de  módulo  podem  ser  camelCased  ;  valem  as 



 
  regras para controladores.  
       É permitida a reprodução parcial ou total desde que citada a fonte
MVC




    Letra V: Zend_View

                                       
    É permitida a reprodução parcial ou total desde que citada a fonte
Zend_View: Introdução
    Implemente  Zend_View_Interface  para  criar  seu 
    próprios mecanismo de template
    A  implementação  padrão  (Zend_View)  usa  PHP  como 
    linguagem de template
    Associa  e  recupera  variáveis  de  visão  como  se  elas 
    fosse variáveis membro de um objeto:
      $view­>content = $body
    Acessa  variáveis  de  visão  em  view  scripts  a  partir  do 
    objeto $this:
      <?= $this­>content ?>
    Benefícios: Todo o PHP está a sua disposição
    Problemas: Todo o PHP está a sua disposição
                                            
         É permitida a reprodução parcial ou total desde que citada a fonte
Zend_View: View Scripts


    Mistura HTML e PHP
    Acessa variáveis de template usando a notação $this
    Mantém variáveis associadas em seu próprio escopo
    Distingue  facilmente  variáveis  associadas  de  variáveis 
    locais
    Fácil  implementação  de  placeholder:  simplesmente 
    associa  a  partir  de  view  scripts  e  usa  mais  tarde  em 
    view scripts


                                            
         É permitida a reprodução parcial ou total desde que citada a fonte
Zend_View: View Scripts




    Usa tags curtas do PHP para uma notação sucinta:

<?= $this­>content ?>




                                           
        É permitida a reprodução parcial ou total desde que citada a fonte
Zend_View: View Helpers


    Classes que estendem a funcionalidade de Zend_View
    Usam
     Modelos  de  acesso  (por  exemplo,  adiciona  um  feed   
     del.icio.us à sua página)
     Formata ou trata saída (por exemplo transforma texto wiki 
     para XHTML)
     Lógica  de  exibição  (por  exemplo,  mostra  botões  de  login 
     se o usuário não estiver logado)
     Snippets  de  exibição  reutilizáveis  (por  exemplo,  caixa  de 
     busca)

                                            
         É permitida a reprodução parcial ou total desde que citada a fonte
Zend_View: View Helpers



UsandoView Helpers:
Chame como se o helper fosse um método do objeto de 
 visão

<?=$this­>formText('username') ?>




                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
MVC




                Zend_...: 
               Cadê o 'M'?

                                       
    É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Model?


O que é um Modelo?
 Banco de dados
 Web Services
 Feeds
 Arquivos de configuração
 Sistema de arquivos
 Imagens


                                       
    É permitida a reprodução parcial ou total desde que citada a fonte
Zend_Model?

Como o Zend Framework endereça o Modelo?
 Na verdade, ele ainda não faz isso, ao menos 
 não como um um componente generalizado.
 Mas o modelo é suportado com componentes 
 especializados:
  Zend_Db_Table
  Zend_Service
  Zend_Feed
  etc.
                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
MVC




    Colocando tudo junto

                                        
     É permitida a reprodução parcial ou total desde que citada a fonte
MVC




    Alô Mundo com ZF

                                       
    É permitida a reprodução parcial ou total desde que citada a fonte
MVC




                          CRUD

                                       
    É permitida a reprodução parcial ou total desde que citada a fonte
Referências



Allen, R. Zend Framework Overview. 29/08/2008.
O'Phinney,  M.  W.  Zend  Framework:  Creating  a 
 CRUD Application. 28/02/2007.
IDEM.  Zend  Framework  MVC  Quick  Start. 
 09/10/2007.



                                        
     É permitida a reprodução parcial ou total desde que citada a fonte

Mais conteúdo relacionado

Semelhante a Palestra Zend Framework CONAPHP CONISLI

Desenvolvendo em Zend Framework: Ênfase no Zend_Db
Desenvolvendo em Zend Framework: Ênfase no Zend_DbDesenvolvendo em Zend Framework: Ênfase no Zend_Db
Desenvolvendo em Zend Framework: Ênfase no Zend_DbFlávio Lisboa
 
Palestra Zend Framework FISL XI
Palestra Zend Framework FISL XIPalestra Zend Framework FISL XI
Palestra Zend Framework FISL XIFlávio Lisboa
 
MVC com Zend Framework
MVC com Zend FrameworkMVC com Zend Framework
MVC com Zend FrameworkFlávio Lisboa
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Flávio Lisboa
 
Code Igniter & Zend Framework Uma UniãO De Sucesso
Code Igniter & Zend Framework   Uma UniãO De SucessoCode Igniter & Zend Framework   Uma UniãO De Sucesso
Code Igniter & Zend Framework Uma UniãO De SucessoJose Wilker
 
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDesenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDomingos Teruel
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...iMasters
 
Ionic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPIonic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPFabio Godoy
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012Luís Cobucci
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no javaPedro Cavalero
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework LaminasFlávio Lisboa
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
 
ASP.Net Core FAQ
ASP.Net Core FAQASP.Net Core FAQ
ASP.Net Core FAQLuiz Duarte
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaDaniel Brandão
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.101 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1César Augusto Pessôa
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016Marcos Paulo
 

Semelhante a Palestra Zend Framework CONAPHP CONISLI (20)

Desenvolvendo em Zend Framework: Ênfase no Zend_Db
Desenvolvendo em Zend Framework: Ênfase no Zend_DbDesenvolvendo em Zend Framework: Ênfase no Zend_Db
Desenvolvendo em Zend Framework: Ênfase no Zend_Db
 
Palestra Zend Framework FISL XI
Palestra Zend Framework FISL XIPalestra Zend Framework FISL XI
Palestra Zend Framework FISL XI
 
MVC com Zend Framework
MVC com Zend FrameworkMVC com Zend Framework
MVC com Zend Framework
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011
 
Frameworks PHP @edgarsandi
Frameworks PHP @edgarsandiFrameworks PHP @edgarsandi
Frameworks PHP @edgarsandi
 
Code Igniter & Zend Framework Uma UniãO De Sucesso
Code Igniter & Zend Framework   Uma UniãO De SucessoCode Igniter & Zend Framework   Uma UniãO De Sucesso
Code Igniter & Zend Framework Uma UniãO De Sucesso
 
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDesenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
Ionic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPIonic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APP
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no java
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework Laminas
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada framework
 
ASP.Net Core FAQ
ASP.Net Core FAQASP.Net Core FAQ
ASP.Net Core FAQ
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem Java
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.101 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016
 

Mais de Flávio Lisboa

Criando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPCriando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPFlávio Lisboa
 
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaCooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaFlávio Lisboa
 
Aprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasAprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasFlávio Lisboa
 
Ciência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoCiência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoFlávio Lisboa
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHPFlávio Lisboa
 
PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?Flávio Lisboa
 
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Flávio Lisboa
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 
Como se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoComo se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoFlávio Lisboa
 
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPFlávio Lisboa
 
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamComunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamFlávio Lisboa
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosFlávio Lisboa
 
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosEstudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosFlávio Lisboa
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosFlávio Lisboa
 
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasSemeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasFlávio Lisboa
 
O que é programação de computadores
O que é programação de computadoresO que é programação de computadores
O que é programação de computadoresFlávio Lisboa
 
Economia em rede (comunidade)
Economia em rede (comunidade)Economia em rede (comunidade)
Economia em rede (comunidade)Flávio Lisboa
 
Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Flávio Lisboa
 
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)Flávio Lisboa
 

Mais de Flávio Lisboa (20)

Criando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPCriando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHP
 
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaCooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
 
Aprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasAprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com Laminas
 
Ciência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoCiência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com método
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHP
 
PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?
 
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
Como se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoComo se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundo
 
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
 
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamComunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dados
 
Amanhecer esmeralda
Amanhecer esmeraldaAmanhecer esmeralda
Amanhecer esmeralda
 
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosEstudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviços
 
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasSemeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
 
O que é programação de computadores
O que é programação de computadoresO que é programação de computadores
O que é programação de computadores
 
Economia em rede (comunidade)
Economia em rede (comunidade)Economia em rede (comunidade)
Economia em rede (comunidade)
 
Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)
 
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
 

Palestra Zend Framework CONAPHP CONISLI

  • 1. Zend Framework + PDT Introdução http://www.fgsl.eti.br      É permitida a reprodução parcial ou total desde que citada a fonte
  • 2. Sobre o que falarei? ● Quem sou eu? ● Provocação ● Motivação ● O que é Zend Framework? ● Por que Zend Framework? ● Ferramenta: Eclipse + Plugin PDT ● Introdução ao MVC do ZF ● Introdução a formulários dinâmicos     É permitida a reprodução parcial ou total desde que citada a fonte
  • 3. Flávio Lisboa ● Trabalha no SERPRO, Serviço Federal de  Processamento de Dados.  ● Trabalhou no Projeto de Internalização do PHP  no SERPRO, definindo padrões, elaborando e  ministrando treinamentos e finalmente avaliando  e indicando um framework padrão. ● Tradução de capítulos do ZF. ● Livro: Zend Framework     É permitida a reprodução parcial ou total desde que citada a fonte
  • 5. Provocação O  IMPORTANTE  É QUE  FUNCIONA! Iron Man, created by Stan Lee  and Don Heck. Marvel Comics All Rights      Reserved.
  • 6. Provocação FAZ O QUE  TEM QUE  FAZER, NÃO  FAZ?     Iron Man, created by Stan Lee and Don Heck. Marvel Comics All Rights Reserved.
  • 7. Motivação Dilbert created by Scott Adams. All Rights Reserved.    
  • 8. Motivação Dilbert created by Scott Adams. All Rights Reserved.    
  • 9. Motivação PENSE NO FUTURO! Joker created by Bob Kane. DC Comics All Reserved    
  • 10. Motivação “As coisas devem ser feitas tão simples  quanto  for  possível,  mas  não  de  forma  simplista. Albert Einstein ● Simples é mais fácil de usar. ● Simples é mais estável, e menos propenso a  erros. ● Simples é mais compatível. ● Simples é mais fácil de manter.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 11. Motivação Não seria maravilhoso se  todos os programadores  PHP do mundo  trabalhassem de uma  forma padronizada, de  modo que pudessem  compartilhar seus  componentes e reutilizar  milhares de linhas de  código fonte? Deve ser um sonho...   O´Reilly Media All rights reserved.  
  • 12. O que é Zend Framework? ● É um framework “self­service”: use o que você  precisa ● Fracamente acoplado ● Fácil integração com qualquer outro framework ● Só PHP 5 ● Disponível em http://framework.zend.com      É permitida a reprodução parcial ou total desde que citada a fonte
  • 13. Amigável... para negócios ● Todo código licenciado sob new BSD (livre  mesmo!) ● CLA – Requerido para contribuição, mas evita  problemas de roubo de propriedade industrial ● Certificação oficial ● Mantido ativamente pela Zend     É permitida a reprodução parcial ou total desde que citada a fonte
  • 14. Por que usar Zend Framework? SIMPLICIDADE,  CONHEÇA O  PODER!     Iron Man, created by Stan Lee and Don Heck. Marvel Comics All Rights Reserved.
  • 15. Por que usar Zend Framework? ● Simples, porém poderoso! ● Toda a parte incômoda dos bits já está feita! ● Projeto moderno: PHP 5, OO ● Resolve 80% do espaço de problema ● Flexível e configurável para os 20% restantes ● Comprometido em minimizar quebras no  controle de negócios     É permitida a reprodução parcial ou total desde que citada a fonte
  • 16. Arquitetura  É um framework, não apenas componentes “Cola” para construir aplicações ● ● Ferramenta para incrementar a produtividade ● Componentes desenvolvidos e testados juntos  Use somente o que você precisa, mas ● Ele sempre será distribuido em sua totalidade ● Atualização feita sempre em um clique.  Ainda  trabalha  com  outros  (PEAR,  Smarty,  etc)     É permitida a reprodução parcial ou total desde que citada a fonte
  • 17. Arquitetura     Dengeki Sentai Changeman. Toei Company Limited. All Rights Reserved
  • 19. O que há no Zend Framework? ● Model­View­Controller ● Dados: banco de dados, JSON, PDF, busca ● I18n: localização, tradução, data, moeda ● Web services: consumo e disponibilização ● Serviços de infra­estrutura: autenticação, listas  de controle de acesso, cache, config, log, mail,  session     É permitida a reprodução parcial ou total desde que citada a fonte
  • 20. Processo de Desenvolvimento ● Estrita  aderência  aos  Padrões  de  Codificação  Zend. ● Todas  as  classes  completamente  testadas  com  PHPUnit. ● Revisão por pares e aprovação de todo código.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 21. Recursos disponíveis ● Documentação on­line ● Comunidade ● Fóruns, listas de discussão, IRC (#zftalk) www.zfbrasil.com  ● Livros disponíveis ● Modelo de negócio de software livre: projeto com  apoio de grandes empresas     É permitida a reprodução parcial ou total desde que citada a fonte
  • 22. Depoimentos bwin Games AB, subsidiária da bwin Interactive Entertainment AG Desafio: Modernizar uma aplicação PHP 4 complexa  e de alto­tráfico Para  nós  um  framework  MVC  foi  um  fator  crítico,  mas  também  foi  ótimo  ver  que  Zend  Framework  tinha  muito  mais  características  robustas  com  as  quais  poderíamos  crescer,  incluindo  um  excelente  suporte  para  internacionalização. Marcus Eriksson Líder Desenvolvedor     É permitida a reprodução parcial ou total desde que citada a fonte
  • 23. Depoimentos Desafios:  Necessidade  que  os  componentes  PHP  que  eles  tinham  construído  fossem  amplamente  reutilizados  na IBM; Necessidade de suportar múltiplos bancos de dados  facilmente; Necessidade  de  um  framework  limpo,  confiável  e  suportado pela comunidade;   Não  inventar  um  novo  framework,  mesmo  a  IBM    É permitida a reprodução parcial ou total desde que citada a fonte
  • 24. Depoimentos Zend Framework era focado justamente nas áreas certas  para nós. Nosso time ganhou muito tempo e economizou  esforço  usando  os  blocos  de  construção  do  Zend  Framework em nosso projeto QEDWiki*. Stewart Nickolas Arquiteto Líder * QEDWiki é uma aplicação Web 2.0     É permitida a reprodução parcial ou total desde que citada a fonte
  • 25. Depoimentos IGN Entertainment, divisão da Fox Interactive Media Desafios: Construir uma plataforma de longa  duração, usando as melhores práticas e padrões de  projeto para melhorar aplicações e a performance  para a rede de sites da comunidade IGN.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 26. Depoimentos IGN Entertainment, divisão da Fox Interactive Media Zend  Framework  é  incrivelmente  efetivo  para  a  IGN  porque  ele  não  impõe  sua  estrutura  e  permite  que  nós  tomemos nossas próprias decisões arquiteturais. Tony Ford Gerente de Engenharia     É permitida a reprodução parcial ou total desde que citada a fonte
  • 27. Depoimentos Indianapolis Motor Speedway Desafios:  Outras  bibliotecas  eram  muito  difíceis  de  instalar,  desenvolver,  estender  e  distribuir  e  eles  ainda queriam maior performance dos sites que eles  administravam.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 28. Depoimentos Indianapolis Motor Speedway Tivemos uma queda de 20% no tempo de carregamento  das  páginas  desde  que  começamos  a  usar  Zend  Framework. Isso é significativo para sites de alto tráfego  como os nossos. Jon Whitcraft Líder Desenvolvedor de Aplicações     É permitida a reprodução parcial ou total desde que citada a fonte
  • 29. Depoimentos Plataforma de e­Commerce de código aberto Desafios:  O  custo  associado  com  treinamento  de  novos  desenvolvedores era muito alto. Suportar seu próprio framework caseiro sem o conhecimento  de uma comunidade open­source estava provando ser difícil Necessidade  de  um  “framework  profissional  que  tivesse  suporte”, uma empresa por trás para a qual os contribuidores  Magento pudessem se dirigir para suporte.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 30. Depoimentos Plataforma de e­Commerce de código aberto Com  quase  meio  milhão  de  downloads  de  Magento,  traduções em mais de 60 línguas, comunidade de 30 mil  membros,  mais  de  70  parceiros,  e  com  mais  de  150  extensões  Magento  Connect  escritas,  a  plataforma  Magento  eCommerce  alcançou  claramente  um  sucesso  agressivo e dirige um número significativo de transações  web comerciais.  Roy Rubin CEO     É permitida a reprodução parcial ou total desde que citada a fonte
  • 31. Ferramenta Plugin PDT (PHP Development Tools) Plugin para a plataforma Eclipse http://www.eclipse.org/pdt/  Recomendação:  Eclipse  Europa  3.3.2  (porque  garanto que a versão 1.0.3  do PDT funciona)     É permitida a reprodução parcial ou total desde que citada a fonte
  • 32. Ferramenta Release 2.0 prometido para 29/12/2008 Funcionará no Eclipse Ganymede     É permitida a reprodução parcial ou total desde que citada a fonte
  • 33. Fluxo MVC do ZF     É permitida a reprodução parcial ou total desde que citada a fonte
  • 34. MVC Modelo Tudo  o  que  é  usado  pela  aplicação  para  fazer  algo de útil: dados, web services, feeds, etc. Visão A página devolvida para o usuário. Controlador Gerencia  o ambiente de requisição e determina o  que acontece.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 35. Interações MVC Controlador <­> Visão O Controlador e a Visão podem interagir. Controlador <­> Modelo O Controlador pode puxar dados do modelo para  decidir algo, ou empurrar dados para o modelo. View <­ Modelo A  Visão  pode  acessar  o  modelo  para  recuperar  dados, mas não pode gravar nele.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 36. MVC Letra C:  Zend_Controller     É permitida a reprodução parcial ou total desde que citada a fonte
  • 37. Front Controller     É permitida a reprodução parcial ou total desde que citada a fonte
  • 38. Zend_Controller_Front A  classe  Zend_Controller_Front  implementa  o  padrão de projeto Front Controller. Esse padrão prevê um objeto que: ● Manipula todas as requisições. ● Delega  requisições  para  os  'Page  Controllers'  manipular. ● Devolve a resposta.      É permitida a reprodução parcial ou total desde que citada a fonte
  • 39. Zend_Controller_Front: Responsabilidades Objeto  Request:  contém  todas  as  informações  sobre o ambiente de requisição. Objeto Router: decompõe o ambiente  em  vários  tokens  representando  o  módulo,  controlador  e  ação atuais. Objeto  Dispatcher:  mapeia  os  tokens  de  roteamento  para  as  classes  controladoras  de  ação e métodos, e executa­os. Objeto Response: contém a resposta completa e  tem a habilidade para enviá­la.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 40. Zend_Controller_Front: Diagrama de Processo     É permitida a reprodução parcial ou total desde que citada a fonte
  • 41. Zend_Controller_Front: Laço Despachante  Método  dispatch()  manipula  a  entrada  de  requisições  Instancia  objetos  de  requisição  e  resposta  se  não  foram previamente configurados.  Requisita rotas.  Entra em um laço despachante ● Ação de despacho  Instancia o controlador de ação  Chama o método de ação ● Despacha até que o objeto de requisição não reporte  mais ações a serem despachadas.  Retorna resposta (envia por padrão)     É permitida a reprodução parcial ou total desde que citada a fonte
  • 42. Zend_Controller_Front: Roteamento Roteamento Padrão:  /controller/action  /controller/action/key1/value1/key2/value2  /module/controller/action  /module/controller/action/key1/value1/... Outras rotas podem ser configuradas     É permitida a reprodução parcial ou total desde que citada a fonte
  • 43. Zend_Controller_Front: Roteamento Modificando o roteamento: Reescreva o roteador:  Zend_Controller_Router_Rewrite é a implementação  de roteador padrão  Permite  a  anexação  de  tantas  rotas  nomeadas  quanto se desejar ● Rotas  nomeadas  permitem  empurrar  rotas  para  operações  posteriores,  tais  como  montagem  de  URL  ou determinar o que se casa com uma URL  Rotas são executadas em ordem LIFO  A  interface  Route  permite  a  definição  de  seus    próprios tipos de rota para suas aplicações   É permitida a reprodução parcial ou total desde que citada a fonte
  • 45. Zend_Controller_Front: Roteamento $defaults = array( 'controller'  => 'news', 'action' => 'view' ); $requirement = array( 'id' => 'd+', // permite 1 ou + dígitos ); $route = new Zend_Controller_Router_Route('news/view/:id', $defaults,$requirement); // Zend_Controller_Router_Rewrite $router = $frontController­>getRouter(); $router­>addRoute('newsItem',$route); $frontController­>setRouter($router);     É permitida a reprodução parcial ou total desde que citada a fonte
  • 46. Page Controller Zend_Controller_Action implementa o padrão de projeto  Page Controller.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 47. Zend_Controller_Action: Básico Action Controllers:  Classes simples que estendem Zend_Controller_Action  O nome da classe termina em 'Controller' ● IndexController ● BlogController  CamelCasing permitido ● FooBarController ● Separa palavras CamelCased em URLs com '­' (hífen)  foo­bar     É permitida a reprodução parcial ou total desde que citada a fonte
  • 48. Zend_Controller_Action: Básico Controllers Actions:  Método que o Action Controller deve executar  Métodos públicos que terminam em 'Action' ● barAction ● indexAction  CamelCasing permitido ● fooBarAction() ● Separa palavras CamelCased em URLs com '­' (hífen)  foo­bar     É permitida a reprodução parcial ou total desde que citada a fonte
  • 49. Zend_Controller_Action: Básico O  Controlador  de  Ação  está  preparado  para  tratar  os  seguintes eventos:  init(): instanciação do objeto  preDispatch(): antes que a ação seja despachada.  postDispatch(): depois que a ação foi executada.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 50. Zend_Controller_Action: Básico Métodos utilitários: ● _forward($action,$controller  =  null,  $module  =  null,  array $params = null): desvia o processamento para outra  ação. ● _redirect($url): redireciona para outra URL. ● render($action,$name,$noController): renderiza um script  de visão alternativo. ● _call($method,  $params):  usado  para  criar  ações  'dinâmicas'  ou  internamente  para  desviar  para  uma  ação  padrão.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 51. Zend_Controller_Action: Básico ViewRenderer ● A integração com a Visão está disponível automaticamente ● Registrado pelo action helper ViewRenderer ● Pode ser desabilitado ● A  propriedade    $view  do  controlador  contém  um  objeto  de  visão ● Associa variáveis à visão:   $this­>view­>model = $model; Pode ser obtido assim: Zend_Controller_Action_HelperBroker::getStaticHelper('view Renderer')     É permitida a reprodução parcial ou total desde que citada a fonte
  • 52. Zend_Controller_Action: Básico  View  scripts  são  renderizados  automaticamente  durante o evento postDispatch()  View  scripts  são  nomeados  de  acordo  com  o  controlador e a ação: ● FooController::barAction() renderiza foo/bar.phtml ● NewsController::listAction() renderiza news/list.phtml  Desabilitando o ViewRenderer ● setNoRender() o desabilitará para a ação atual ● Chamar  _forward()  ou  _redirect()  nunca  renderiza  automaticamente     É permitida a reprodução parcial ou total desde que citada a fonte
  • 53. Zend_Controller_Action: Básico Customizando o ViewRenderer:  setView()  Configura  o  objeto  de  Visão  (permite  implementaçoes  customizadas de visão!)  setViewSuffix()  Altera o sufixo de arquivo usado  setView(Base|Script)PathSpec()  Configura  a  especificação  de  caminho  usada  para  autodeterminação do local das visões  setResponseSegment()  Configura  o  segmento  de  resposta  nomeado  para  o  qual  renderizar     É permitida a reprodução parcial ou total desde que citada a fonte
  • 54. Zend_Controller_Action: Básico Módulos:  Um  conjunto  de  controladores  de  ação,  modelos  e  visões relacionados.  Estrutura  de  diretórios  mimetiza  estrutura  de  diretório  de application: ● controllers ● models ● views  Nomes  de  classes  controladoras  devem  ser  prefixadas  com o nome do módulo: Foo_ViewController­>foo/controllers/ViewController.php  Nomes  de  módulo  podem  ser  camelCased  ;  valem  as    regras para controladores.   É permitida a reprodução parcial ou total desde que citada a fonte
  • 55. MVC Letra V: Zend_View     É permitida a reprodução parcial ou total desde que citada a fonte
  • 56. Zend_View: Introdução Implemente  Zend_View_Interface  para  criar  seu  próprios mecanismo de template A  implementação  padrão  (Zend_View)  usa  PHP  como  linguagem de template Associa  e  recupera  variáveis  de  visão  como  se  elas  fosse variáveis membro de um objeto:   $view­>content = $body Acessa  variáveis  de  visão  em  view  scripts  a  partir  do  objeto $this:   <?= $this­>content ?> Benefícios: Todo o PHP está a sua disposição Problemas: Todo o PHP está a sua disposição     É permitida a reprodução parcial ou total desde que citada a fonte
  • 57. Zend_View: View Scripts Mistura HTML e PHP Acessa variáveis de template usando a notação $this Mantém variáveis associadas em seu próprio escopo Distingue  facilmente  variáveis  associadas  de  variáveis  locais Fácil  implementação  de  placeholder:  simplesmente  associa  a  partir  de  view  scripts  e  usa  mais  tarde  em  view scripts     É permitida a reprodução parcial ou total desde que citada a fonte
  • 58. Zend_View: View Scripts Usa tags curtas do PHP para uma notação sucinta: <?= $this­>content ?>     É permitida a reprodução parcial ou total desde que citada a fonte
  • 59. Zend_View: View Helpers Classes que estendem a funcionalidade de Zend_View Usam Modelos  de  acesso  (por  exemplo,  adiciona  um  feed    del.icio.us à sua página) Formata ou trata saída (por exemplo transforma texto wiki  para XHTML) Lógica  de  exibição  (por  exemplo,  mostra  botões  de  login  se o usuário não estiver logado) Snippets  de  exibição  reutilizáveis  (por  exemplo,  caixa  de  busca)     É permitida a reprodução parcial ou total desde que citada a fonte
  • 61. MVC Zend_...:  Cadê o 'M'?     É permitida a reprodução parcial ou total desde que citada a fonte
  • 62. Zend_Model? O que é um Modelo? Banco de dados Web Services Feeds Arquivos de configuração Sistema de arquivos Imagens     É permitida a reprodução parcial ou total desde que citada a fonte
  • 63. Zend_Model? Como o Zend Framework endereça o Modelo? Na verdade, ele ainda não faz isso, ao menos  não como um um componente generalizado. Mas o modelo é suportado com componentes  especializados: Zend_Db_Table Zend_Service Zend_Feed etc.     É permitida a reprodução parcial ou total desde que citada a fonte
  • 64. MVC Colocando tudo junto     É permitida a reprodução parcial ou total desde que citada a fonte
  • 65. MVC Alô Mundo com ZF     É permitida a reprodução parcial ou total desde que citada a fonte
  • 66. MVC CRUD     É permitida a reprodução parcial ou total desde que citada a fonte
  • 67. Referências Allen, R. Zend Framework Overview. 29/08/2008. O'Phinney,  M.  W.  Zend  Framework:  Creating  a  CRUD Application. 28/02/2007. IDEM.  Zend  Framework  MVC  Quick  Start.  09/10/2007.     É permitida a reprodução parcial ou total desde que citada a fonte