pense no futuro: php com zend framework
DESCRIPTION
Apresentação realizada no TDC Florianópolis 2010, que ocorreu na Unisul em Palhoça, SC.TRANSCRIPT
![Page 1: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/1.jpg)
Globalcode – Open4educationwww.fgsl.eti.br É livre a reprodução, desde que citada a fonte. @fgsl
Trilha – WebFlávio Gomes da Silva Lisboa
Pense no Futuro: com
![Page 2: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/2.jpg)
Globalcode – Open4education
Agenda
PHP: Vale a pena investir?O SobrinhoPHP ProfissionalFrameworkZend Framework
![Page 3: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/3.jpg)
Globalcode – Open4education
PHP: Vale a pena investir?PHP é multiplataforma.
PHP é compatível com quase todos os servidores usados hoje, como Apache.
PHP é fácil de aprender e roda de forma eficiente no lado servidor.
PHP provê muitas extensões para tarefas de programação particulares.
![Page 4: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/4.jpg)
Globalcode – Open4education
Calculado em 26 de outubro de 2010. Fonte: http://trends.builtwith.com/framework/PHP
PHP: Vale a pena investir?
![Page 5: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/5.jpg)
Globalcode – Open4education
PHP: Vale a pena investir?
Calculado em 26 de outubro de 2010. Fonte: http://trends.builtwith.com/framework/PHP
![Page 6: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/6.jpg)
Globalcode – Open4education
desenhosanimadosclube.com blogdoxandro.blogspot.co
m
As quatro linguagens de programação mais populares do mundo:
1 – Java 2 – C 3 – C ++ 4 – PHP
PHP: Vale a pena investir?
![Page 7: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/7.jpg)
Globalcode – Open4education
PHP: Vale a pena investir?
![Page 8: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/8.jpg)
Globalcode – Open4education
PHP facilita o reuso
PHP 5 possui suporte completo a orientação a objetos. A versão 5.3 possui ainda mais facilidades.
PHP é concisa, direta e objetiva.
PHP possui estruturas que permitem generalizar o código, evitando a repetição desnecessária de comandos que fazem a mesma coisa em situações diferentes.
![Page 9: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/9.jpg)
Globalcode – Open4education
PHP trata a imprevisibilidade
Independente da classe a ser usada:
$object = new $class();
Independente do método a ser executado:
$result = $object->$method();
![Page 10: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/10.jpg)
Globalcode – Open4education
PHP generaliza o códigoMétodos dinâmicos:
public function __call($method,$arguments)
$object = new $class();
Leitura, gravação e criação dinâmica de atributos:
public function __get($attribute)public function __set($attribute,$value)
![Page 11: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/11.jpg)
Globalcode – Open4education
Huey, Dewey, Louis and Donal Duck by Walt Disney
Único problema real do PHP
![Page 12: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/12.jpg)
Globalcode – Open4education
O Sobrinho
![Page 13: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/13.jpg)
Globalcode – Open4education
O Sobrinho
![Page 14: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/14.jpg)
Globalcode – Open4education
O Sobrinho
![Page 15: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/15.jpg)
Globalcode – Open4education
O Sobrinho
![Page 16: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/16.jpg)
Globalcode – Open4education
☻Ciclo de Projeto e Desenvolvimento►Padrões►Segurança►Foco na fácil manutenção►Funcionalidades reusáveis (não apenas copiar e colar)►Procedimentos que garantem qualidade
☻Distribuição►Necessidade de ferramentas que ajudem a suportar a aplicação no ambiente real►Performence previsível e consistente.
oglobo.globo.com
PHP Profissional
![Page 17: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/17.jpg)
Globalcode – Open4education
☻Projeto modular►Evita a complexidade que advém com o crescimento
☻Melhores práticas►Você absorve as práticas e bons hábitos dos criadores do framework
☻Componentes►Mantém você com novas tecnologias
carpediem-lica.blogspot.com
Para que um framework?
![Page 18: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/18.jpg)
Globalcode – Open4education
☻Nenhum framework é completo►Nenhum software é completo
☻Frameworks devem ser mínimos►Fuja de soluções completas e definitivas
☻Como eu integro o framework X dentro do framework que eu escolhi►Se ele não for fracamente acoplado, você não integra!
school.discoveryeducation.com
Qual framework?
![Page 19: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/19.jpg)
Globalcode – Open4education
☻Um ponto de partida para aplicações PHP, que provê:
►Características de segurança;
►Projeto modular
☻Uma coleção de mais de 70 componentes PHP para simplificar tarefas comuns, incluindo alguns para:
►Criação (e reuso) de formulários
►Logging
►Acesso a banco de dados
☻Uma demonstração das melhores práticas de PHP 5
☻Provê padrões e grande funcionalidade mas não cria dificuldades para seu estilo de programação. Seu desenvolvimento não é limitado de forma alguma.
Zend Framework
![Page 20: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/20.jpg)
Globalcode – Open4education
☻Criação da estrutura e componentes de um projeto PHP OO MVC►Ferramenta para linha de comando►Pode ser integrado com uma IDE, como Eclipse
Zend_Tool
![Page 21: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/21.jpg)
Globalcode – Open4education
☻ModeloClasses reusáveis que acessam dados e regras de negócioMantém SQL e detalhes da aplicação em um só lugar
☻VisãoTemplates contendo HTML ou outra saída, com poucos trechos de PHPColoca seu HTML em uma “visão” sem preocupação em sobrescrever o código PHP principal – e ajuda web designers a trabalharem com programadores de regras de negócio
☻Controlador (controlador de página)Fluxo da aplicaçãoConecta modelo e visãoNão confunda com “controlador frontal”, que apenas inicializa o MVC
enciclopedia.com.pt
bignadaquasar.wordpress.com
oglobo.globo.com
MVC
![Page 22: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/22.jpg)
Globalcode – Open4education
Do Controlador Frontal para o Controlador de Página
![Page 23: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/23.jpg)
Globalcode – Open4education
Controlador Frontal roteia URLs amigáveis
Convenção de roteamento padrão:http://exemplo.com.br/controller/action/param1/value1...
controller mapeia para o
nome da classe action mapeia para o nome do
método
Pares param/value são passados para
a ação
FrontController
Controller1action1()action2()
Controller2action1()action2()
Bootstrap:index.php
HTTP request
![Page 24: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/24.jpg)
Globalcode – Open4education
index.php: passagem obrigatória
Todas as requisições passam por index.php no doc root. Este é o único diretório público.index.php inicializa a aplicação e instancia o Zend_Controller_Front.O roteamento depende do módulo mod_rewrite estar disponível. A regra de reescrita pode ser definida no arquivo httpd.conf (ou em outro .conf ) ou por meio de arquivos .htaccess (o que exige AllowOverride All).
![Page 25: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/25.jpg)
Globalcode – Open4education
Crie um virtual host
Listen 8000RewriteEngine on
NameVirtualHost 10.11.12.13:8000<VirtualHost 10.11.12.13:8000> DocumentRoot /www/myprojects</VirtualHost>
<Directory /www/myprojects> # disallow .htaccess, so webserver won’t search for them AllowOverride None
# funnel all requests to index.php # except requests for static resources RewriteEngine On RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php</Directory>
![Page 26: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/26.jpg)
Globalcode – Open4education
Ou use arquivos .htaccess
Neste caso, o arquivo aponta para o diretório public.
E é preciso configurar a baseUrl para o Controlador Frontal
define('BASE_URL',substr($_SERVER['PHP_SELF'],0,strpos($_SERVER['PHP_SELF'] ,'/public/index.php'))) ;
RewriteEngine On RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ public/index.php
![Page 27: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/27.jpg)
Globalcode – Open4education
index.php<?php// caminhos completos evitam perda de tempo na busca por arquivos$paths = array( realpath(dirname(__FILE__) . '/../library'), realpath(dirname(__FILE__) . '/../application'), realpath(dirname(__FILE__) . '/../application/models'), '.');set_include_path(implode(PATH_SEPARATOR, $paths)); // Controlador Frontal$frontController = Zend_Controller_Front::getInstance(); // Despacho da requisição$frontController->dispatch();
![Page 28: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/28.jpg)
Globalcode – Open4education
Zend_Application
Deixa a configuração e inicialização separadas
$application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');$application->bootstrap() ->run();
![Page 29: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/29.jpg)
Globalcode – Open4education
Zend_Application[production]phpSettings.display_startup_errors = 0phpSettings.display_errors = 0includePaths.library = APPLICATION_PATH "/../library"bootstrap.path = APPLICATION_PATH "/Bootstrap.php"bootstrap.class = "Bootstrap"appnamespace = "Application"resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"resources.frontController.params.displayExceptions = 0resources.frontController.baseUrl = BASE_URLresources.frontController.plugins.controller = "Fgsl_Plugin_Controller"resources.layout.layout = "layout"resources.db.adapter = "pdo_pgsql"resources.db.params.host = "localhost"resources.db.params.username = "postgres"resources.db.params.password = "postgres"resources.db.params.dbname = "tudodb"resources.db.isDefaultTableAdapter = true
[staging : production][testing : production]phpSettings.display_startup_errors = 1phpSettings.display_errors = 1
[development : production]phpSettings.display_startup_errors = 1phpSettings.display_errors = 1resources.frontController.params.displayExceptions = 1
![Page 30: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/30.jpg)
Globalcode – Open4education
Zend_Controller_ActionClasses de controle manipulam grupos de requisições
http://exemplo.com/controller/action
Padrão: IndexController
Organiza e agrupa funcionalidades
Uma classe (herdeira de Zend_Controller_Action) para cada controlador
Métodos de ação em cada classe de controle manipulam requisições
http://exemplo.com.br/controller/action
Padrão: indexAction()
Algo como actionAction()
Exemplo: Se action é “edit” então o método é editAction()
![Page 31: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/31.jpg)
Globalcode – Open4education
Zend_Controller_Action
![Page 32: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/32.jpg)
Globalcode – Open4education
Zend_Loader_Autoloader
Na verdade, não é preciso usar require ou include... pelo menos não mais que uma vez!No index.php, coloque isto:
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();$autoloader->registerNamespace('Zend');
![Page 33: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/33.jpg)
Globalcode – Open4education
Zend_ViewScripts (templates)
Templates baseados em scripts PHP para apresentação de dados
Devem conter somente lógica de exibição, não lógica de negócio
Nomeação padrão: “myaction.phtml”
Helpers
Classes e métodos que provêem funcionalidade de visão reutilizável
Exemplos helpers embutidos: escape(), formText(), partial(), partialLoop(), headTitle()
Escreva os seus também
Layout: Zend_Layout
![Page 34: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/34.jpg)
Globalcode – Open4education
Zend_View
Você pode substituir literais HTML no script de visão por comandos PHP echo:
<?php echo $this->productNum ?>
ZF provê padrões inteligentes
O view helper $this->escape() usa a função htmlentities() recomendada pela maioria dos especialistas em segurança.
![Page 35: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/35.jpg)
Globalcode – Open4education
Faça seu view helperclass Zend_View_Helper_Title_Case {
public $view;
public function titleCase($string = '') { return ucwords(strtolower(trim($string)));
} //(public function titleCase())
public function setView(Zend_View_Interface $view) {$this->view = $view;
}}
Uso:echo $this->titleCase(‘mozilla firefox’);
![Page 36: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/36.jpg)
Globalcode – Open4education
Controlador chama visão...
![Page 37: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/37.jpg)
Globalcode – Open4education
...automaticamente
![Page 38: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/38.jpg)
Globalcode – Open4education
Zend_LayoutDá a seu site uma aparência consistente enquanto retém a
flexibilidade
Padrão Two-step viewUsa Zend_View para renderização
Marcadores úteis para configurar javascript, títulos e outros dados variáveis
![Page 39: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/39.jpg)
Globalcode – Open4education
Zend_Layout
![Page 40: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/40.jpg)
Globalcode – Open4education
Zend_... Model?Classes modelo são representações abstratas de dados
Podem ser estendidas de:Zend_Db_Table – Para abstração de banco de dados
Ou qualquer outra classe que se encaixe em sua necessidade
Ou construa suas próprias representações abstratas de seus dados
Classes modelo podem conter lógica de negócio para preparar dados complexos para apresentação
Código que seja estranho ao controlador e a visão é um bom candidato a ficar no modelo.
![Page 41: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/41.jpg)
Globalcode – Open4education
Zend_FormCria o HTML para seus formulários de entrada
$form = new Zend_Form();$form->addElement(‘text’, ‘ordernum‘);$form->addElement(‘text’, ‘date‘);
Vários modos de imprimir os elementos de formulário
echo $form; // tudo ou echo $form->ordernum; // só o especificado ou
echo $form->getElement(‘ordernum’);
HTML gerado pelo último echo
<input type=“text” name=“ordernum” id=“ordernum”>
![Page 42: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/42.jpg)
Globalcode – Open4education
Zend_Form
Pode ser integrado com Zend_Filter, para fazer conversões de dadosPode ser integrado com Zend_Validate, para fazer validação de dados.Pode ser integrado com o Dijit do Dojo Toolkit para implementar RIA.
![Page 43: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/43.jpg)
Globalcode – Open4education
Zend_DbZend_Db pode criar SQL para você
Strings SQL tendem a causar erros e não são curtas
Zend_Db oferece muito mais do que apenas criar SQL
quoting consistente
escaping
prepared statements (substituições para “?”)
profiler
![Page 44: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/44.jpg)
Globalcode – Open4education
Zend_DbZend_Db implementa padrões para acesso a dados
Data Table GatewayData Row GatewayData MapperActive Record
![Page 45: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/45.jpg)
Globalcode – Open4education
Muitos componentes...
![Page 46: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/46.jpg)
Globalcode – Open4education
Segurança
Autenticação, Autorização, Filtragem, Validação
bahianoticias.com.br
![Page 47: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/47.jpg)
Globalcode – Open4education
Infraestrutura
Registro Global, Sessão, Carregador de classes...
odebrechtonline.com.br
![Page 48: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/48.jpg)
Globalcode – Open4education
Performance
Cache, memória...
automaistv.com.br
![Page 49: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/49.jpg)
Globalcode – Open4education
Web Services
XML-RPC, SOAP, REST
![Page 50: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/50.jpg)
Globalcode – Open4education
Nuvem
Zend_GData, Zend_Service_Amazon, Zend_Cloud
pela-positiva.blogspot.com
![Page 51: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/51.jpg)
Globalcode – Open4education
Mais informações
http://framework.zend.comhttp://forum.zfbrasil.comLivros:
![Page 52: Pense no futuro: PHP com Zend Framework](https://reader036.vdocuments.com.br/reader036/viewer/2022062319/556407acd8b42a080c8b47b7/html5/thumbnails/52.jpg)
Globalcode – Open4education
Mão na Massa
http://www.temporealeventos.com.br/?area=199