palestra zend framework conaphp conisli
DESCRIPTION
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).TRANSCRIPT
Zend Framework + PDTIntroduçã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çãoFAZ 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
Joker created by Bob Kane. DC Comics All Reserved
PENSE NO
FUTURO!
Motivação
● 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.
“As coisas devem ser feitas tão simples quanto for possível, mas não de forma simplista.
Albert Einstein
É permitida a reprodução parcial ou total desde que citada a fonte
MotivaçãoNã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 “selfservice”: 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?
Iron Man, created by Stan Lee and Don Heck. Marvel Comics All Rights Reserved.
SIMPLICIDADE, CONHEÇA O
PODER!
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?
● ModelViewController● Dados: banco de dados, JSON, PDF, busca● I18n: localização, tradução, data, moeda● Web services: consumo e disponibilização● Serviços de infraestrutura: 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 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
Depoimentos
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 ErikssonLíder Desenvolvedor
É permitida a reprodução parcial ou total desde que citada a fonte
bwin Games AB, subsidiária da bwin Interactive Entertainment AG
DepoimentosDesafios:
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 tendo recursos para tanto.É 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 NickolasArquiteto Líder
* QEDWiki é uma aplicação Web 2.0É permitida a reprodução parcial ou total desde que citada a fonte
Depoimentos
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
IGN Entertainment, divisão da Fox Interactive Media
Depoimentos
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 FordGerente de Engenharia
É permitida a reprodução parcial ou total desde que citada a fonte
IGN Entertainment, divisão da Fox Interactive Media
Depoimentos
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
Indianapolis Motor Speedway
Depoimentos
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 WhitcraftLíder Desenvolvedor de Aplicações
É permitida a reprodução parcial ou total desde que citada a fonte
Indianapolis Motor Speedway
Depoimentos
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
Plataforma de eCommerce de código aberto
Depoimentos
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 RubinCEO
É permitida a reprodução parcial ou total desde que citada a fonte
Plataforma de eCommerce de código aberto
Ferramenta
Plugin PDT (PHP Development Tools)
Plugin para a plataforma Eclipsehttp://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
FluxoMVC do ZF
É permitida a reprodução parcial ou total desde que citada a fonte
MVC
ModeloTudo o que é usado pela aplicação para fazer algo de útil: dados, web services, feeds, etc.
VisãoA página devolvida para o usuário.
ControladorGerencia 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ãoO Controlador e a Visão podem interagir.
Controlador <> ModeloO Controlador pode puxar dados do modelo para decidir algo, ou empurrar dados para o modelo.
View < ModeloA 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 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
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)
foobar
É 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)
foobar
É 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 templateA implementação padrão (Zend_View) usa PHP como linguagem de templateAssocia e recupera variáveis de visão como se elas fosse variáveis membro de um objeto: $view>content = $bodyAcessa variáveis de visão em view scripts a partir do objeto $this: <?= $this>content ?>Benefícios: Todo o PHP está a sua disposiçãoProblemas: 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 PHPAcessa variáveis de template usando a notação $thisMantém variáveis associadas em seu próprio escopoDistingue facilmente variáveis associadas de variáveis locaisFá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_ViewUsam
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 dadosWeb ServicesFeedsArquivos de configuraçãoSistema de arquivosImagens
É 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_TableZend_ServiceZend_Feedetc.
É 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