45
Aplicando MVC em PHP com Zend Framework Visão Controlador Modelo www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.

Palestra Zend Framework FISL XI

Embed Size (px)

Citation preview

Page 1: Palestra Zend Framework FISL XI

Aplicando MVC em PHP com Zend Framework

Visão

Controlador

Modelo

www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.

Page 2: Palestra Zend Framework FISL XI

Quem sou eu?

www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.

Page 3: Palestra Zend Framework FISL XI

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.

Page 4: Palestra Zend Framework FISL XI

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...

Page 5: Palestra Zend Framework FISL XI

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

Page 6: Palestra Zend Framework FISL XI

Arquitetura geral do Zend Framework

www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.

Page 7: Palestra Zend Framework FISL XI

Arquitetura geral do Zend Framework

MVCController

View

Data

Database

XML

Search

PDF

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.

Page 8: Palestra Zend Framework FISL XI

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.

Page 9: Palestra Zend Framework FISL XI

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.

Page 10: Palestra Zend Framework FISL XI

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.

Page 11: Palestra Zend Framework FISL XI

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.

Page 12: Palestra Zend Framework FISL XI

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.

Page 13: Palestra Zend Framework FISL XI

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.

Page 14: Palestra Zend Framework FISL XI

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.

Page 15: Palestra Zend Framework FISL XI

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.

Page 16: Palestra Zend Framework FISL XI

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_'));

Page 17: Palestra Zend Framework FISL XI

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...

Page 18: Palestra Zend Framework FISL XI

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

Page 19: Palestra Zend Framework FISL XI

MVC no Zend Framework

www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.

v

M

CControlador Frontal

HTTP

REQUEST

Page 20: Palestra Zend Framework FISL XI

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.

Page 21: Palestra Zend Framework FISL XI

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

Page 22: Palestra Zend Framework FISL XI

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.

Page 23: Palestra Zend Framework FISL XI

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.

Page 24: Palestra Zend Framework FISL XI

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

Page 25: Palestra Zend Framework FISL XI

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

Page 26: Palestra Zend Framework FISL XI

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{}

Page 27: Palestra Zend Framework FISL XI

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

Page 28: Palestra Zend Framework FISL XI

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();

Page 29: Palestra Zend Framework FISL XI

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

Page 30: Palestra Zend Framework FISL XI

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 }}

Page 31: Palestra Zend Framework FISL XI

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; }}

Page 32: Palestra Zend Framework FISL XI

MVC no Zend Framework

www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.

Fluxo da requisição e plugins

C

Page 33: Palestra Zend Framework FISL XI

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

Page 34: Palestra Zend Framework FISL XI

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...

Page 35: Palestra Zend Framework FISL XI

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

Page 36: Palestra Zend Framework FISL XI

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

Page 37: Palestra Zend Framework FISL XI

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)

Page 38: Palestra Zend Framework FISL XI

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

Page 39: Palestra Zend Framework FISL XI

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

Page 40: Palestra Zend Framework FISL XI

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

Page 41: Palestra Zend Framework FISL XI

Perguntas?

www.fgsl.eti.br

Page 42: Palestra Zend Framework FISL XI

MUITO OBRIGADO!

Page 43: Palestra Zend Framework FISL XI

Referências

● Matthew Weier O'Phinney. Zend Framework Tutorial. ZendCon 2009.

● Martin Fowler. Padrões de Arquitetura de Aplicações Corporativas. Bookman, 2006.

Page 44: Palestra Zend Framework FISL XI

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

Page 45: Palestra Zend Framework FISL XI

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