Palestra Zend Framework CONAPHP CONISLI

1.828 visualizações

Publicada em

Palestra realizada em 2008, no CONAPHP (Congresso Nacional de PHP), que ocorreu dentro do CONISLI (Congresso Internacional de Software Livre), na FIAP (Faculdade de Informática e Administração Paulsta).

Publicada em: Tecnologia
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Palestra Zend Framework CONAPHP CONISLI

  1. 1. Zend Framework + PDT Introdução http://www.fgsl.eti.br      É permitida a reprodução parcial ou total desde que citada a fonte
  2. 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. 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
  4. 4. 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
  5. 5. Provocação O  IMPORTANTE  É QUE  FUNCIONA! Iron Man, created by Stan Lee  and Don Heck. Marvel Comics All Rights      Reserved.
  6. 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. 7. Motivação Dilbert created by Scott Adams. All Rights Reserved.    
  8. 8. Motivação Dilbert created by Scott Adams. All Rights Reserved.    
  9. 9. Motivação PENSE NO FUTURO! Joker created by Bob Kane. DC Comics All Reserved    
  10. 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. 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. 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. 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. 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. 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. 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. 17. Arquitetura     Dengeki Sentai Changeman. Toei Company Limited. All Rights Reserved
  18. 18. Arquitetura    
  19. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 33. Fluxo MVC do ZF     É permitida a reprodução parcial ou total desde que citada a fonte
  34. 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. 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. 36. MVC Letra C:  Zend_Controller     É permitida a reprodução parcial ou total desde que citada a fonte
  37. 37. Front Controller     É permitida a reprodução parcial ou total desde que citada a fonte
  38. 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. 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. 40. Zend_Controller_Front: Diagrama de Processo     É permitida a reprodução parcial ou total desde que citada a fonte
  41. 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. 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. 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
  44. 44. 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
  45. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 55. MVC Letra V: Zend_View     É permitida a reprodução parcial ou total desde que citada a fonte
  56. 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. 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. 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. 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
  60. 60. 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
  61. 61. MVC Zend_...:  Cadê o 'M'?     É permitida a reprodução parcial ou total desde que citada a fonte
  62. 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. 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. 64. MVC Colocando tudo junto     É permitida a reprodução parcial ou total desde que citada a fonte
  65. 65. MVC Alô Mundo com ZF     É permitida a reprodução parcial ou total desde que citada a fonte
  66. 66. MVC CRUD     É permitida a reprodução parcial ou total desde que citada a fonte
  67. 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

×