zend framework
TRANSCRIPT
Zend Framework
Collaboration Project● Iniciativas de código
aberto● Envolve Zend, sócios
e comunidade● Promover a utilização
do PHP
● Projetos– Zend Framework*– Developer Zone– Eclipse PHP IDE
Zend Framework
Framework de código aberto de altíssima qualidade para construção de aplicações para
internet e Web Services com PHP.
Objetivos● Fornecer um
ambiente completo para aplicações escritas em PHP.
● Tornar o PHP uma tecnologia padrão de mercado.
Objetivos● Envolver a
comunidade e desenvolvedores.
● Prover componentes de alta qualidade e com atualizações constantes.
Padrões● Formatação de
arquivos.● Convenção de
nomes.● Estilo de codificação.● Documentação de
código.
Componentes● Cache● Configuration● Controller● DataBase● Feed● Filter● HTTP Client● Json
Componentes● Log● Mail● Mime● PDF● Search● Service● View● XML RPC
O Caminho das Pedras● Por onde começar?● Até onde é possível
chegar?● Onde estamos?● Pra onde vamos?● Será que lá tem
internet?
Arquitetura
Olá Mundo!● Estrutura de
Diretórios– Bibliotecas– Artefatos Públicos– Aplicação
● Controladoras● Telas● Banco de Dados
O Início● Centralização das
Requisições– Rewrite Rules
● Inicialização do sistema.– Include Path– Autoload
O Início.htaccessRewriteEngine onRewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
index.php<?phpdefine( 'ZEND_DIR', '/biblioteca/Zend/' );ini_set( 'include_path', ini_get('include_path') . PATH_SEPARATOR . ZEND_DIR);function __autoload( $class ){ // ... Zend::loadClass( $class );}include 'Zend.php';Zend_Controller_Front::run('/aplicacao/controladora');?>
Controle● Zend_Controller
– Fornece alicerces para construção de sistemas baseados no padrão MVC.
Controle● Componentes
– Roteador– Despachante– Ações
ControleIndexController.php<?phpclass IndexController extends Zend_Controller_Action { public function indexAction() { } public function noRouteAction() { $this->_redirect( '/' ); }}?>
UsuarioController.php<?phpclass UsuarioController extends Zend_Controller_Action { public function listarAction() { }}?>
Tela● Zend_View
– Provê assistentes, filtros de saída e escape de variáveis para construção de telas.
Tela● Componentes
– Assistente– Renderizador
● Sistema de renderização flexível e desacoplado.– Smarty– Template Power– Script
TelaUsuarioController.php<?phpclass UsuarioController extends Zend_Controller_Action { public function listarAction() { $tela = new Zend_View(); $tela->usuarios = array(); echo $view->render( 'listar_usuarios.php' ); }}?>
listar_usuarios.php<html> <head> <title>Listar Usuários</title> </head> <body> <ul> <?php foreach( $this->usuarios as $usuario ): ?> <li><?= $usuario->nome ?></li> <?php endforeach; ?> </ul> </body></html>
Telaformulario.php<html> <head> <title>Listar Usuários</title> </head> <body> <form action="/Usuario/Cadastrar" method="get"> <?php $this->formSelect( 'pais', 'BR', null, $this->paises ); ?> </form> </body></html>
resultado:<select name="pais"> <option value="AR">Argentina</option> <option value="BR" selected="selected">Brasil</option> <option value="ES">Espanha</option></select>
Banco de Dados● Zend_Db
– Construção de comandos e mapeamento automático das tabelas.
Banco de Dados● Utiliza o adaptador
PHP Data Object.● Compatibilidade
– Firebird– Oracle– PostgreSQL– MSSQL– MySQL– SQLite
Banco de Dados● Componentes
– Select● Construção de
instruções sql independente do adaptador utilizado.
– Table● Manipulação
automatizada dos dados.
Banco de DadosUsuarioController.php<?phpclass UsuarioController extends Zend_Controller_Action { public function listarAction(){ $params = array ( 'host' => '127.0.0.1', 'username' => 'rene', 'password' => '******', 'dbname' => 'tse' ); $db = Zend_Db::factory( 'pdoMysql', $params ); $select = $db->select(); $select->from( 'candidato', '*' ); $select->where( 'partido = ?', 49 ); $select->order( 'honestidade' ); $select->limit( 10, 20 ); $lista = $db->fetchAll( $select ); }}?>
Banco de DadosUsuarioController.php<?phpclass UsuarioController extends Zend_Controller_Action { public function listarAction(){ $params = array ( 'host' => '127.0.0.1', 'username' => 'marco_aurerio', 'password' => '******', 'dbname' => 'tse' ); $db = Zend_Db::factory( 'pdoMysql', $params ); $select = $db->select(); $select->from( 'candidato', '*' ); $select->where( 'historico <> ?', 'nebuloso' ); $select->order( 'honestidade' ); $select->limit( 10, 20 ); $lista = $db->fetchAll( $select ); }}?>
Banco de DadosCandidato.php<?phpclass Candidato extends Zend_Db_Table {}?>
UsuarioController.php<?phpclass UsuarioController extends Zend_Controller_Action { public function listarAction(){ $params = array ( 'host' => '127.0.0.1', 'username' => 'marco_aurerio', 'password' => '******', 'dbname' => 'tse' ); $db = Zend_Db::factory( 'pdoMysql', $params ); Zend_Db_Table::setDefaultAdapter( $db ); $candidato = new Candidato(); $lista = $candidato->find( array( 49, 3 ) ); }}?>
Um Pouco Mais de Tempero
Service AmazonExemploController.php<?phpclass ExemploController extends Zend_Controller_Action { public function indexAction() { $amazon = new Zend_Service_Amazon( CHAVE ); $lista = $amazon->itemSearch( array( 'SearchIndex' => 'livros', 'Keywords' => 'azeitona' ) ); echo $view->render( 'exemplo.php' ); }}
exemplo.php<html> <head> <title>Listar Resultados</title> </head> <body> <ul> <?php foreach( $this->lista as $item ): ?> <li><?= $item->title ?></li> <?php endforeach; ?> </ul> </body></html>
Service FlickrExemploController.php<?phpclass ExemploController extends Zend_Controller_Action { public function indexAction() { $flickr = new Zend_Service_Flickr( CHAVE ); $lista = $flickr->tagSearch( 'repolho' ); echo $view->render( 'exemplo.php' ); }}
exemplo.php<html> <head> <title>Listar Resultados</title> </head> <body> <ul> <?php foreach( $this->lista as $item ): ?> <li><?= $item->title ?></li> <?php endforeach; ?> </ul> </body></html>
Service YahooExemploController.php<?phpclass ExemploController extends Zend_Controller_Action { public function indexAction() { $yahoo = new Zend_Service_Yahoo( CHAVE ); $lista = $yahoo->webSearch( 'tomate' ); echo $view->render( 'exemplo.php' ); }}
exemplo.php<html> <head> <title>Listar Resultados</title> </head> <body> <ul> <?php foreach( $this->lista as $item ): ?> <li><?= $item->title ?></li> <?php endforeach; ?> </ul> </body></html>
Feedexemplo.php<?php
try { $slashdot = Zend_Feed::import('http://rss.slashdot.org/'); foreach ( $slashdot as $item ) { echo $item->title(); echo $item->link(); echo $item->description(); }} catch ( Zend_Feed_Exception $exception ) { echo $exception->getMessage(); exit;}?>
Mailexemplo.php<?php $mail = new Zend_Mail(); $mail->setFrom( '[email protected]', 'Renê de Lima' ); $mail->addTo( '[email protected]', 'Renan de Lima' ); $mail->setSubject( 'saudações' ); $mail->setBodyText( 'Olá enfermeira!' ); $mail->send();?>
Além do Horizonte● Arquitetura Orientada
a Serviços● Web Services● Rich Interface
Applications
Como participar?● Revisão e análise
– Comunidade– Core Team
● Laboratório● Encubadora
O mundo● CakePHP● Phrame● Prado
Zend Framework