pense no futuro: php com zend framework

Post on 26-May-2015

1.162 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Apresentação realizada no TDC Florianópolis 2010, que ocorreu na Unisul em Palhoça, SC.

TRANSCRIPT

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

Globalcode – Open4education

Agenda

PHP: Vale a pena investir?O SobrinhoPHP ProfissionalFrameworkZend Framework

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.

Globalcode – Open4education

Calculado em 26 de outubro de 2010. Fonte: http://trends.builtwith.com/framework/PHP

PHP: Vale a pena investir?

Globalcode – Open4education

PHP: Vale a pena investir?

Calculado em 26 de outubro de 2010. Fonte: http://trends.builtwith.com/framework/PHP

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?

Globalcode – Open4education

PHP: Vale a pena investir?

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.

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

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)

Globalcode – Open4education

Huey, Dewey, Louis and Donal Duck by Walt Disney

Único problema real do PHP

Globalcode – Open4education

O Sobrinho

Globalcode – Open4education

O Sobrinho

Globalcode – Open4education

O Sobrinho

Globalcode – Open4education

O Sobrinho

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

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?

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?

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

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

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

Globalcode – Open4education

Do Controlador Frontal para o Controlador de Página

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

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

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>

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

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

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

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

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

Globalcode – Open4education

Zend_Controller_Action

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

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

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.

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

Globalcode – Open4education

Controlador chama visão...

Globalcode – Open4education

...automaticamente

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

Globalcode – Open4education

Zend_Layout

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.

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

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.

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

Globalcode – Open4education

Zend_DbZend_Db implementa padrões para acesso a dados

Data Table GatewayData Row GatewayData MapperActive Record

Globalcode – Open4education

Muitos componentes...

Globalcode – Open4education

Segurança

Autenticação, Autorização, Filtragem, Validação

bahianoticias.com.br

Globalcode – Open4education

Infraestrutura

Registro Global, Sessão, Carregador de classes...

odebrechtonline.com.br

Globalcode – Open4education

Performance

Cache, memória...

automaistv.com.br

Globalcode – Open4education

Web Services

XML-RPC, SOAP, REST

Globalcode – Open4education

Nuvem

Zend_GData, Zend_Service_Amazon, Zend_Cloud

pela-positiva.blogspot.com

Globalcode – Open4education

Mais informações

http://framework.zend.comhttp://forum.zfbrasil.comLivros:

Globalcode – Open4education

Mão na Massa

http://www.temporealeventos.com.br/?area=199

Globalcode – Open4education

PHP Conference 2010

www.phpconf.com.br

Globalcode – Open4education

Obrigado

flaviogomesdasilva@yahoo.com.br

top related