Palestra Zend Framework FISL XI

Preview:

Citation preview

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

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.

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

Perguntas?

www.fgsl.eti.br

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