palestra zend framework fisl xi
TRANSCRIPT
Aplicando MVC em PHP com Zend Framework
Visão
Controlador
Modelo
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Quem sou eu?
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
agenda
● Arquitetura geral do Zend Framework● MVC no Zend Framework● Camada de Controle● Camada de Modelo● Camada de Visão● Exemplo de como estender o framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Não vamos discutir PHP...
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
...porque um terço das aplicações do mundo já o utiliza...
E aplicações de negócio baseadas em PHP tendem a crescer...
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Source: Gartner (December 2007)
Prog
ram
mer
s (M
illio
ns)
2006 2007 2008 2009 2010 2011 2012 2013
Part-Time DevelopersAnd Hobbyists
Independent Software Vendors
Corporate IT Developers
Arquitetura geral do Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Arquitetura geral do Zend Framework
MVCController
View
Data
Database
XML
Search
i18n
Locale
Translate
Measure
Date
Calendar
Currency
Web Services
Feed
Client
Server
Services
Core
Config
Log
Registry
Session
CacheSecurity
Acl
Auth
Filter
Validate
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Arquitetura geral do Zend Framework
Transformers é uma marca registrada da Hasbro (http://www.hasbro.com). Todos os direitos reservados. Fonte: blog.niot.net
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Arquitetura geral do Zend Framework
Transformers é uma marca registrada da Hasbro (http://www.hasbro.com). Todos os direitos reservados. Fonte: http://www.nipoheroes.hpg.ig.com.br/SSentai/Changeman/ArmasChangeman/ArmasChangeman.html
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Ou seja, Zend Framework é:
► Uma biblioteca de componentes. (fracamente acoplados).► Um framework. (extensível e flexível).
Arquitetura geral do Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Arquitetura geral do Zend Framework
Biblioteca de componentes fracamente acoplados?
O que isso significa?
Que outros frameworks podem usar componentes do Zend.
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Arquitetura geral do Zend Framework
Framework extensível e flexível?
O que isso significa?
Que Zend Framework pode usar outros frameworks e componentes COMO SE FOSSEM REALMENTE PARTE DELE.
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Arquitetura geral do Zend Framework
Mais do que isso!
A arquitetura do Zend Framework aproveita o modelo de negócio de software livre e evita forks!
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Arquitetura geral do Zend Framework
1. TENHO UM PROBLEMA!
5. RESOLVI O PROBLEMA!(PELO MENOS AGORA...)
2. USO A COMUNIDADE 3. NÃO POSSO ESPERAR!
4. FAÇO UM FORK (OU POG)
6. E SE TIVER QUE FAZER MANUTENÇÃO?
METODOLOGIA “NÃO QUERO PAGAR E TENHO PRAZO PRA ENTREGAR”
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Arquitetura geral do Zend Framework
1. TENHO UM PROBLEMA!
5. RESOLVI O PROBLEMADIREITO!
2. USO A COMUNIDADE 3. NÃO POSSO ESPERAR!
4. ESTENDO, USANDO A INTERFACE PADRÃO, E SUBMETO PRA COMUNIDADE
6. O QUE FOI PRA COMUNIDADE SERÁ TESTADO, APERFEIÇOADO E PODEREI UTILIZAR SEM CAUSAR IMPACTO NA APLICAÇÃO!
METODOLOGIA ZEND FRAMEWORK
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Arquitetura geral do Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Namespaces
Os nomes das classes possuem um relacionamento de 1 para 1 com o sistema de arquivos:
Zend_Db_Table => Zend/Db/Table.php
$al = Zend_Loader_Autoloader::getInstance();$al->registerNamespace('Huguinho_');$al->registerNamespace(array('Zezinho_', 'Luisinho_'));
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Shrek é uma marca registrada da Dreamworks (http://www.dreamworksanimation.com). Todos os direitos reservados.
APLICAÇÕES SÃO COMO CEBOLAS...
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Fonte: http://blog.fedecarg.com/2008/07/28/zend-framework-architecture/
Homem-Aranha é uma marca registrada da Marvel (http://www.marvel.com). Todos os direitos reservados.
Fonte: http://www.lojadeanimes.com.br
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
v
M
CControlador Frontal
HTTP
REQUEST
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
SetEnv APPLICATION_ENV development
RewriteEngine OnRewriteRule ^.*$ public/index.php
O Controlador Frontal exige reescrita de URL.
A aplicação interpreta a requisição, não o servidor.
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
As rotas-padrão do Zend framework são:
aplicação/controlador/ação/chave1/valor1
aplicação/módulo/controlador/ação/chave1/valor1
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
$router = $ctrl->getRouter(); $router->addRoute( 'user', new Zend_Controller_Router_Route('user/:username', array('controller' => 'user', 'action' => 'info')) );
Mas o framework permite a criação de rotas customizadas.
MVC no Zend Framework
Um projeto MVC pode ser criado rapidamente com Zend Tool.
Ele pode ser executado na linha de comando ou integrado com IDEs como Eclipse e Netbeans.
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
# Unix:% zf.sh create project quickstart
# DOS/Windows:C:> zf.bat create project quickstart
MVC no Zend
Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Estrutura do projeto MVC Zend Framework
convencional
quickstart|-- application| |-- Bootstrap.php| |-- configs| | `-- application.ini| |-- controllers| | |-- ErrorController.php| | `-- IndexController.php| |-- models| `-- views| |-- helpers| `-- scripts| |-- error| | `-- error.phtml| `-- index| `-- index.phtml|-- library|-- public| `-- index.php`-- tests |-- application | `-- bootstrap.php |-- library | `-- bootstrap.php `-- phpunit.xml
14 directories, 10 files
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Inicialização da aplicação
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{}
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Configuração da aplicação[production]phpSettings.display_startup_errors = 0phpSettings.display_errors = 0includePaths.library = APPLICATION_PATH "/../library"bootstrap.path = APPLICATION_PATH "/Bootstrap.php"bootstrap.class = "Bootstrap"resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
[staging : production]
[testing : production]phpSettings.display_startup_errors = 1phpSettings.display_errors = 1
[development : production]phpSettings.display_startup_errors = 1phpSettings.display_errors = 1
ControladorFrontal
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Carregamento da Configuração
/** Zend_Application */require_once 'Zend/Application.php';
// Create application, bootstrap, and run$application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');$application->bootstrap() ->run();
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
O Controle
Fonte: http://cesarpallares.files.wordpress.com/2009/01/agente-86.jpg
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Padrão de Projeto: Controlador de página<?php
class IndexController extends Zend_Controller_Action{ public function init() { /* Initialize action controller here */ }
public function indexAction() { // action body }}
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Controlador de errosclass ErrorController extends Zend_Controller_Action{ public function errorAction() { $errors = $this->_getParam('error_handler'); switch ($errors->type) { case 'EXCEPTION_NO_CONTROLLER': case 'EXCEPTION_NO_ACTION': // 404 error -- controller or action not found $this->getResponse()->setHttpResponseCode(404); $this->view->message = 'Page not found'; break; default: // application error $this->getResponse()->setHttpResponseCode(500); $this->view->message = 'Application error'; break; } $this->view->exception = $errors->exception; $this->view->request = $errors->request; }}
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Fluxo da requisição e plugins
C
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
O Modelo
Cláudia Schiffer Naomi Campbell Riyo Mori
MVC no Zend Framework
Não tem Zend_Model...
Mas tem:►Zend_Db_Table►Zend_Feed►Zend_Rest►Zend_Service►Zend_Soap►Zend_XmlRpc►Zend_Search_Lucene...
MVC no Zend Framework
Zend_Db_Table
►Mapeia tabelas relacionais para classes PHP.►Define relacionamentos e restrições no modelo.►Permite construir consultas orientadas a objeto com Zend_Db_Table_Select.►Não obriga a criação de classes PHP (>1.10), pode criar modelos dinamicamente.►Pode ser usado de dois modos:
→Tenho saudade de SQL→Active Record
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
A Visão
Fonte: http://amigosdeoracao.files.wordpress.com/2009/07/olho_azul1.jpg
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Para a interface com o usuário, Zend Framework usa o padrão de projeto Vista em Duas Etapas.
1) Primeiro ele transforma dos dados provenientes do modelo, ou enviados pelo
controlador, em uma apresentação lógica, sem qualquer formatação específica (Zend_View)
2) Depois, ele converte essa apresentação lógica na formatação real necessária (Zend_Layout)
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Um layout pode servir para várias páginas:
Layout
Página 1 Página 2 Página 3 Página 4 Página 5
CSSJavascript
CONTEÚDO, NO CORPO DO DOCUMENTO
MVC no Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Zend_View permite reutilização de componente de visão: view partials
Visão Principal
Partial 1 Partial 2 Partial 3
Partials podem ser reaproveitados
Exemplo de como estender o framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Projeto FGSL2ZF
Tratado no livro:
Criando Aplicações PHP com Zend e Dojo
http://sourceforge.net/projects/fgslibraryphp
MUITO OBRIGADO!
Referências
● Matthew Weier O'Phinney. Zend Framework Tutorial. ZendCon 2009.
● Martin Fowler. Padrões de Arquitetura de Aplicações Corporativas. Bookman, 2006.
Mais informações
● Zend Framework website http://framework.zend.com
● Zend Developer Zone http://devzone.zend.com
● ZFTutorials forum http://www.zftutorials.com
● Blogs
● Matthew Weier O'Phinney: http://weierophinney.net/matthew
● Cal Evans: http://blog.calevans.com
● Andries Seutens: http://andries.systray.be/blog
● Rob Allen: http://akrabat.com
● Zend Framework Brasil
● http://www.zfbrasil.com
● http://groups.google.com/group/zfbrasil
Créditos das imagens
● Imagem do Pensador de Auguste Rodin: http://phabrycyulandia.blogspot.com/2010/06/pensamento-em-bronze.html
● Imagem da nuvem: http://ointercessor.blogspot.com/2010/03/nuvem-de-deus.html
● Posição romana “poupem o gladiador”: http://www.observadordaqualidade.com.br/o_que_eh_qualidade/o_que_%20eh_qualidade.gif
● Cogumelo nuclear: http://naweb.files.wordpress.com/2008/04/fim.jpg
● Relógio com homem como ponteiro: http://www.blogdosempreendedores.com.br/wp-content/uploads/2010/04/tempo.jpg
● Tomada e plugue no novo padrão brasileiro: http://tecnocracia.com.br/wp-content/uploads/2007/07/tomadas_padrao3pinos.jpg
● Menino vibrando de alegria: http://20anosdesolidao.blogspot.com/2009/10/alegria-alegria-eu-voltei-para-ninguem.html