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).
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.
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.
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
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 online
● 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 altotrá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
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 eCommerce 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 opensource 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 eCommerce 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
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
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 executaos.
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
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
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
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
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