desenvolvimento rápido com zend framework e eclipse
DESCRIPTION
Palestra proferida no dia 28 de novembro na PHP Conference Brasil 2008TRANSCRIPT
![Page 1: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/1.jpg)
Desenvolvendo em Zend FrameworkÊnfase no Zend_Db
www.fgsl.eti.brPermitida a livre reprodução e cópia desde que citada a fonte
![Page 2: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/2.jpg)
FLÁVIO GOMES DA SILVA LISBOA
BACHAREL EM CIÊNCIA DA COMPUTAÇÃO
ANALISTA DE DESENVOLVIMENTO DE SISTEMASSERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO)
ELABOROU O PROGRAMA DE TREINAMENTO EM PHP DA EMPRESA
É AUTOR DO LIVRO
ZEND FRAMEWORK DESENVOLVENDO EM PHP 5 ORIENTADO A OBJETOS COM MVC
![Page 3: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/3.jpg)
Nossa Agenda:
O desenvolvimento de uma aplicação em PHP com acesso a banco de dados utilizando o editor Eclipse com plugin PDT e a biblioteca de classes Zend Framework.
Desenvolvendo em Zend Framework
![Page 4: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/4.jpg)
Arsenal Mínimo:
Apache 2.2.3 + com mod_rewritePHP 5.1.4 +Zend Framework 1.5.0 +Eclipse 3.3.2Plugin PDT 1.0.3
Multiplataforma: Linux/Windows
Desenvolvendo em Zend Framework
![Page 5: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/5.jpg)
Usaremos aqui:
Apache 2.2.9 + com mod_rewritePHP 5.2.6 +Zend Framework 1.6.2Eclipse 3.3.2Plugin PDT 1.0.3MySQL 5.0.67
Sistema operacional: Ubuntu
Desenvolvendo em Zend Framework
![Page 6: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/6.jpg)
Por que não Eclipse 3.4?
Aguarde PDT 2.0, uma nova versão para um novo ano!
Desenvolvendo em Zend Framework
![Page 7: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/7.jpg)
Editando um arquivo PHP no Eclipse
Desenvolvendo em Zend Framework
![Page 8: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/8.jpg)
Editando um arquivo PHP no Eclipse
Auto-complete (plugin PDT):
●Ativado pela digitação (forçado pelas teclas CTRL + barra de espaços);●Filtro dinâmico por texto parcial;●Mostra descrição, parâmetros e valor de retorno;●Templates de blocos de código (if, while, for, function).
Desenvolvendo em Zend Framework
![Page 9: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/9.jpg)
Editando um arquivo PHP no Eclipse
Auto-complete - Vantagens:
● Acelera a digitação;● Evita erros de sintaxe;● Provê acesso rápido a informações básicas sobre funções; ● Reproduz inclusive as estruturas criadas pelo usuário, como variáveis e classes.
Desenvolvendo em Zend Framework
![Page 10: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/10.jpg)
Editando um arquivo PHP no Eclipse
Teclas úteis:
●Localizar/Substituir: CTRL+F●Ir para uma linha: CTRL+L●Completar a palavra: ALT + /●Busca/Abertura rápida de arquivo, mesmo oculto: SHIFT+CTRL+R
Para exibir as linhas do arquivo: na barra à esquerda do editor marque Show Line Numbers
Desenvolvimento Rápido com Zend Framework e Eclipse
![Page 11: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/11.jpg)
Janelas Úteis:
●PHP Explorer: Árvore hierárquica do projeto.●Outline: Navegação rápida dos componentes do arquivo selecionado.●PHP Project Outline: Navegação rápida por todos os componentes do projeto.●PHP Functions: Referência da linguagem.
Desenvolvimento Rápido com Zend Framework e Eclipse
![Page 12: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/12.jpg)
PHP em mãos erradas
Desenvolvimento Rápido com Zend Framework e Eclipse
Sinestro created by John Broomeand Gil Kane in 1961DC Comics All Rights Reserved
![Page 13: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/13.jpg)
Programador PHP Tradicional
Desenvolvimento Rápido com Zend Framework e Eclipse
Green Lantern Hal Jordan created by John Brorome and Gil Kane in 1959DC Comics All Rights Reserved
![Page 14: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/14.jpg)
Programador PHP Eventual
Desenvolvimento Rápido com Zend Framework e Eclipse
Daffy Duck created by Tex Avery and Bob Campett in 1937Warner Brothers All Rights Reserved
![Page 15: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/15.jpg)
Programador PHP Ideal
Desenvolvimento Rápido com Zend Framework e Eclipse
Rom created by Dankman, Richard and McCoy in 1979Hasbro All Rights Reserved
![Page 16: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/16.jpg)
Zend Framework
Biblioteca de classes PHP
●Software livre e gratuito (licença amigável);●Reutilizável;●Extensível;●Flexível;●Simples;●Evolução constante;●Parceiros importantes;
Desenvolvimento Rápido com Zend Framework e Eclipse
![Page 17: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/17.jpg)
Zend Framework: Arquitetura
Desenvolvimento Rápido com Zend Framework e Eclipse
Dengeki Sentai Changeman. Toei, 1985. Company All Rights Reserved.
![Page 18: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/18.jpg)
Zend Framework: Arquitetura
●Autenticação e Autorização●Bancos de Dados●Diagnóstico e Manutenção●Filtragem e Validação●Formulários Dinâmicos●Infra-estrutura
Desenvolvendo em Zend Framework
![Page 19: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/19.jpg)
Zend Framework: Arquitetura
●Internacionalização●Mail●Model-View-Controller (MVC)●Performance●Busca●Segurança●Web Services
Desenvolvendo em Zend Framework
![Page 20: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/20.jpg)
Zend Framework: Arquitetura
Desenvolvimento Rápido com Zend Framework e Eclipse
Firestorm created byGery Conway andAl Milgrom in 1978DC Comics All RightsReserved
![Page 21: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/21.jpg)
O que precisa ser configurado?
O arquivo httpd.conf do Apache, se for usado o MVC do ZF (nosso caso).
O arquivo php.ini com a extensão do banco de dados a ser utilizado (neste caso, pdo_mysql) se o PHP já não tiver sido compilado com ela.
Desenvolvendo em Zend Framework
![Page 22: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/22.jpg)
httpd.conf
1: Configuração da permissão de sobrescrita das configurações do httpd.conf por arquivos .htaccess
<Directory "[caminho definido em DocumentRoot">
Options FollowSymLinks AllowOverride All Order allow,deny Allow from all</Directory>
Desenvolvendo em Zend Framework
![Page 23: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/23.jpg)
httpd.conf
2: Os módulos: seção Dynamic Shared Object (DSO) Support
LoadModule rewrite_module modules/mod_rewrite.so
Desenvolvendo em Zend Framework
![Page 24: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/24.jpg)
Desenvolvendo em Zend Framework
![Page 25: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/25.jpg)
Desenvolvendo em Zend Framework
Vamos fazer uma aplicação em três tempos (ou três camadas)?
Demorou!
![Page 26: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/26.jpg)
Desenvolvendo em Zend Framework
Zend_DB
Uma viagem, da abstração da conexão até um acesso ao banco de
dados totalmente orientado a objetos.
E um passeio por vários padrões de projeto!
![Page 27: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/27.jpg)
Desenvolvendo em Zend Framework
Componente da vez: Zend_Db_Adapter
Provê classes adaptadoras para as seguintes marcas de bancos de dados:
●Firebird●IBM DB2●Interbase●MySQL●Microsoft SQL Server●Oracle●PostgreSQL●SQLite
E COMO FUNCIONA,
HEIN?
Energizer created by Louise Simonsonand June Brigman in1984Marvel Comics All RightsReserved
![Page 28: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/28.jpg)
Desenvolvendo em Zend Framework
Você pode usar o construtor!
require_once('Zend/Db/Adapter/Pdo/Mysql.php');$db = new Zend_Db_Adapter_Pdo_Mysql(array(
'host' => '127.0.0.1','username' => 'usuario','password' => '12345','dbname' => 'escola'
));
![Page 29: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/29.jpg)
Desenvolvendo em Zend Framework
Você pode usar o padrão Factory!
require_once('Zend/Db.php');/* Carrega automaticamente a classe Zend_Db_Adapter_Pdo_Mysql * e cria uma instância dela.*/$db = Zend_Db::factory('Pdo_Mysql', array(
'host' => '127.0.0.1','username' => 'usuario','password' => '12345','dbname' => 'escola'
));
![Page 30: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/30.jpg)
Desenvolvendo em Zend Framework
Você pode usar sua classe adaptadora!
require_once('Zend/Db.php');/* Carrega automaticamente a classe MyProject_Db_Adapter_Pdo_Mysql e cria umainstância dela. */$db = Zend_Db::factory('Pdo_Mysql', array(
'host' => '127.0.0.1','username' => 'usuario','password' => '12345','dbname' => 'escola',
'adapterNamespace' => 'MyProject_Db_Adapter'));
![Page 31: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/31.jpg)
Desenvolvendo em Zend Framework
Você pode usar Zend_Config com Zend_Db!
require_once('Zend/Db.php');require_once('Zend/Config.php');$config = new Zend_Config(
array('database' => array(
'adapter' => 'Mysqli','params' => array(
'dbname' => 'escola','username' => 'usuario','password' => '12345','host' => '127.0.0.1'
))
));$db = Zend_Db::factory($config>database);
![Page 32: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/32.jpg)
Desenvolvendo em Zend Framework
Você pode usar Zend_Config com Zend_Db!
Ainda podemos carregar a configuração do banco de um arquivo externo, usando as classes filhas de Zend_Config:
Zend_Config_Ini e Zend_Config_Xml
![Page 33: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/33.jpg)
Desenvolvendo em Zend Framework
Zend_Config_Ini, com sua simplicidade:
Arquivo config.ini
[database]db.adapter = PDO_MYSQLdb.config.username = usuariodb.config.password = 12345db.config.host = 127.0.0.1db.config.dbname = escola
![Page 34: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/34.jpg)
Desenvolvendo em Zend Framework
Zend_Config_Ini, com sua simplicidade:
require_once('Zend/Db.php');require_once('Zend/Config/Ini.php');$config = new Zend_Config_Ini('config.ini','database');$db = Zend_Db::factory(
$config>db>adapter,$config>db>config>toArray());
![Page 35: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/35.jpg)
Desenvolvendo em Zend Framework
Zend_Config_Xml, com sua versatilidade:
Arquivo config.xml<?xml version="1.0"?><configdata> <production> <webhost>www.escola.com</webhost> <db> <adapter>pdo_mysql</adapter> <config> <host>db.escola.com</host> <username>pro_user</username> <password>pro_secret</password> <dbname>escola</dbname> </config> </db> </production> <development extends="production"> <db> <config> <host>127.0.0.1</host> <username>usuario</username> <password>12345</password> </config> </db> </development></configdata>
![Page 36: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/36.jpg)
Desenvolvendo em Zend Framework
Zend_Config_Xml, com sua versatilidade:
require_once('Zend/Db.php');require_once('Zend/Config/Xml.php');$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
![Page 37: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/37.jpg)
Desenvolvendo em Zend Framework
A CONEXÃO COM O BANCO É IMEDIATA?
Você quer saber se na hora em que criar a instância de Zend_Db será feita a conexão e um atributo protegido em algum lugar receberá um tipo resource?
A resposta é NÃO. A conexão é feita sob demanda, a partir da primeira consulta ao banco.
Para forçar a conexão, use o método getConnection()
![Page 38: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/38.jpg)
Desenvolvendo em Zend Framework
Obtendo registros na forma de matrizes com o método fetchAll()
$sql = 'SELECT * from alunos WHERE id > ?';$registros = $db>fetchAll($sql,array(2));
![Page 39: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/39.jpg)
Desenvolvendo em Zend Framework
Obtendo registros na forma de matrizes com o método fetchAll()
O resultado de fetchAll() por padrão é uma matriz de duas dimensões, onde a primeira equivale aos registros e a segunda aos campos. Na segunda, as chaves dos elementos são os nomes dos campos, se nada for dito em contrário.
Esse último detalhe pode ser configurado com o método setFetchMode(), usando as constantes Zend_Db::FETCH...
![Page 40: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/40.jpg)
Desenvolvendo em Zend Framework
Obtendo somente a primeira coluna de uma consulta
Se quiser somente a primeira coluna de uma consulta (o primeiro campo especificado na consulta, ou o primeiro definido na tabela), use o método fetchCol(). Ele retornará uma matriz uma dimensão.
Para cada elemento, a chave é o número ordinal do registro na consulta (não na tabela) e o valor é conteúdo do campo.
![Page 41: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/41.jpg)
Desenvolvendo em Zend Framework
Obtendo somente a primeira linha de uma consulta
Se quiser somente a primeira linha de uma consulta (o primeiro registro retornado pela mesma), use o método fetchRow(). Ele retornará uma matriz com uma dimensão.
Para cada elemento, a chave é o nome (ou o ordinal) do campo e o valor é o conteúdo do mesmo.
![Page 42: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/42.jpg)
Desenvolvendo em Zend Framework
Inclusão de registros
$data = array("nome" => 'Peninha'
); $db>insert('alunos',$data);
![Page 43: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/43.jpg)
Desenvolvendo em Zend Framework
Pergunta:
E se ao invés de colocar um valor diretamente, eu queira atribuir ao campo o valor de retorno de uma função do banco?
SEM PROBLEMAS!
Use uma instância de Zend_Db_Expr e passe a função como parâmetro para o construtor.
<?php$data = array('created_on' => new Zend_Db_Expr('CURDATE()'),'bug_description' => 'Something wrong','bug_status' => 'NEW');$db>insert('bugs', $data);
![Page 44: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/44.jpg)
Desenvolvendo em Zend Framework
Pergunta:
E se eu quiser saber qual o id do registro incluído?
Use a função getLastInsertId()
![Page 45: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/45.jpg)
Desenvolvendo em Zend Framework
Atualização de registros:
$data = array("nome" => 'Gansolino'
); $where = $db>quoteInto('nome = ?','Peninha');$db>update('alunos',$data,$where);
![Page 46: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/46.jpg)
Desenvolvendo em Zend Framework
Remoção de registros:
$where = $db>quoteInto('nome = ?','Gansolino');$db>delete('alunos',$where);
![Page 47: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/47.jpg)
Desenvolvendo em Zend Framework
O problema dos campos de texto
O conteúdo de campos do tipo texto em SQL é cerceado por apóstrofos. Como isso pode gerar uma confusão com os apóstrofos, a classe Zend_Db fornece o método quote(), que envolve o texto com os mesmos.
![Page 48: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/48.jpg)
Desenvolvendo em Zend Framework
Controle de Transações
<?php$db>beginTransaction();try {$db>query(...);$db>commit();
} catch (Exception $e) {$db>rollBack();echo $e>getMessage();
}
![Page 49: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/49.jpg)
Desenvolvendo em Zend Framework
Informações sobre as Tabelas
$lista = $db>listTables();
foreach($lista as $table){
echo "<h1>Tabela $table</h1>";$campos = $db>describeTable($table);foreach ($campos as $nome => $dados){
echo "<p><b>$nome</b><br>";foreach ($dados as $chave => $valor){
echo "$chave = $valor<br>";}echo '</p>';
}}
![Page 50: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/50.jpg)
Desenvolvendo em Zend Framework
Encerrando a Conexão
Normalmente não é necessário fechar uma conexão de banco de dados. PHP automaticamente elimina todos os recursos e finaliza uma requisição. Extensões de bancos de dados são desenhadas para fechar a conexão assim que a referência para o objeto de recurso seja eliminada.
![Page 51: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/51.jpg)
Desenvolvendo em Zend Framework
Encerrando a Conexão
$db>closeConnection();
![Page 52: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/52.jpg)
Desenvolvendo em Zend Framework
Declarações: para quê servem?
RECUPERAR TUDO?
NÃO, UM REGISTRO DE CADA
VEZ!Green Arrow created by Mort Weisingerand George Papp in1941DC Comics All RightsReserved
![Page 53: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/53.jpg)
Desenvolvendo em Zend Framework
Preparando Declarações SQLcom o construtor de Zend_Db_Statement
require_once('Zend/Db/Statement.php');require_once('Zend/Config/Xml.php');$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
$sql = 'SELECT * from alunos WHERE id > ?';
$stmt = new Zend_Db_Statement_Pdo($db,$sql);
$stmt>execute(array(2));
while ($registro = $stmt>fetch()){
foreach ($registro as $campo => $conteudo){
echo "$campo = $conteudo<br>";}
}
![Page 54: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/54.jpg)
Desenvolvendo em Zend Framework
Preparando Declarações SQLcom o próprio objeto Zend_Db
require_once('Zend/Db/Statement.php');require_once('Zend/Config/Xml.php');$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
$sql = 'SELECT * from alunos WHERE id > ?';
$stmt = $db>query($sql,array(2));
$stmt>execute();
while ($registro = $stmt>fetch()){
foreach ($registro as $campo => $conteudo){
echo "$campo = $conteudo<br>";}
}
![Page 55: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/55.jpg)
Desenvolvendo em Zend Framework
Recupere uma única coluna
require_once('Zend/Db/Statement.php');require_once('Zend/Config/Xml.php');$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
$sql = 'SELECT * from alunos WHERE id > ?';
$stmt = $db>query($sql,array(2));
$stmt>execute();
while ($coluna = $stmt>fetchColumn(1)){
echo "$coluna<br>";}
![Page 56: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/56.jpg)
Desenvolvendo em Zend Framework
Consultas Orientadas a Objetos:Zend_Db_Select
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
$select = $db>select();
$select>from('alunos');$select>where('id > ?',2);$select>order('nome');
$stmt = $select>query();
$stmt>execute();
while ($registro = $stmt>fetch()){
echo '<p>';foreach ($registro as $campo => $conteudo){
echo "$campo = $conteudo<br>";}echo '</p>';
}
![Page 57: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/57.jpg)
Desenvolvendo em Zend Framework
E EU TENHO QUE
ESCREVER DESSE JEITO?
NÃO! TEM A INTERFACE FLUENTE!
Spiderman created by Stan Leeand Steve Ditko in1962Marvel Comics All RightsReserved
Kingpinr created by Stan Leeand JohnRomita Sr. in1967Marvel Comics All RightsReserved
![Page 58: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/58.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Select:Interface Fluente
require_once('Zend/Db.php');require_once('Zend/Config/Xml.php');$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
$select = $db>select();
$select>from('alunos')>where('id > ?',2)>order('nome');
$stmt = $select>query();
$stmt>execute();
while ($registro = $stmt>fetch()){
echo '<p>';foreach ($registro as $campo => $conteudo){
echo "$campo = $conteudo<br>";}echo '</p>';
}
![Page 59: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/59.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Select:Obtendo a expressão SQL
require_once('Zend/Db.php');require_once('Zend/Config/Xml.php');$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
$select = $db>select();
$select>from('alunos')>where('id > ?',2)>order('nome');
echo $select>__toString();
![Page 60: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/60.jpg)
Desenvolvendo em Zend Framework
Tabelas como Objetos:Zend_Db_Table
É A IMPLEMENTAÇÃO DO GATEWAY DE
TABELA DE DADOS!
Green Lantern Alan Scottcreated by Bill Fingerand Martin Nodell in1940DC ComicsAll RightsReserved
![Page 61: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/61.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Table :Criando o Modelo
<?phprequire_once('Zend/Db/Table.php');class Alunos extends Zend_Db_Table{protected $_name = 'alunos';
}?>
![Page 62: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/62.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Table :Usando o Modelo para Recuperar Registros
require_once('Zend/Db.php');require_once('Zend/Config/Xml.php');require_once('Alunos.php');
$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>dbconfig>toArray());
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$alunos = new Alunos();
$where = $alunos>getDefaultAdapter()>quoteInto('id > ?',2);$registros = $alunos>fetchAll($where,'nome');
![Page 63: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/63.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Table :Usando o Modelo para Recuperar Registros
foreach($registros as $registro){
echo '<p>';foreach ($registro>toArray() as $campo => $conteudo){
echo "$campo = $conteudo<br>";}echo '</p>';
}
![Page 64: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/64.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Table :Incluindo registros
require_once('Zend/Db.php');require_once('Zend/Config/Xml.php');require_once('Alunos.php');
$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$alunos = new Alunos();
$data = array("nome" => 'Urtigão'
);
$alunos>insert($data);
![Page 65: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/65.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Table :Atualizando registros
require_once('Zend/Db.php');require_once('Zend/Config/Xml.php');require_once('Alunos.php');
$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$alunos = new Alunos();
$data = array("nome" => 'Vovó Donalda'
);
$where = $alunos>getAdapter()>quoteInto('id = ?',14);$alunos>update($data,$where);
![Page 66: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/66.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Table :Apagando registros
require_once('Zend/Db.php');require_once('Zend/Config/Xml.php');require_once('Alunos.php');
$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$alunos = new Alunos();
$data = array("nome" => 'Vovó Donalda'
);
$where = $alunos>getAdapter()>quoteInto('id = ?',15);$alunos>delete($where);
![Page 67: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/67.jpg)
Desenvolvendo em Zend Framework
Conjuntos de Linhas como Objetos:Zend_Db_Rowset
É A IMPLEMENTAÇÃO DO GATEWAY DE
LINHAS DE DADOS!
![Page 68: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/68.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Rowset a partir de Zend_Db_Table
As consultas feitas com os métodos fetchAll() e find() retornam objetos Zend_Db_Rowset.
O método find() faz buscas diretamente pela chave primária.Se um valor simples for passado como parâmetro, ele retorna um objeto Zend_Db_Rowset com somente um objeto Zend_Db_Row.Se for passado uma matriz de valores, serão retornados tantos objetos Zend_Db_Row quantos os cujas chaves primárias combinarem com as da matriz.
![Page 69: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/69.jpg)
Desenvolvendo em Zend Framework
Linhas como Objetos:Zend_Db_Row
$alunos = new Alunos();
$where = $alunos>getDefaultAdapter()>quoteInto('id > ?',2);
$registros = $alunos>fetchAll($where,'nome');
while ($registro = $registros>current()){
echo '<p>';foreach ($registro>toArray() as $campo => $conteudo){
echo "$campo = $conteudo<br>";}echo '</p>';$registros>next();
}
OPA, TEM UM PADRÃO ITERATOR AQUI!
![Page 70: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/70.jpg)
Desenvolvendo em Zend Framework
TÁ, MAS PRA QUE SERVE
AFINAL ESSE ZEND_DB_ROW?
Linhas como Objetos:Zend_Db_Row
The Thingcreated by Stan Leeand Jack Kirby in1961Marvel ComicsAll RightsReserved
![Page 71: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/71.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Row:Objetos Persistentes
require_once('Zend/Db.php');require_once('Zend/Config/Xml.php');require_once('Alunos.php');
$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$alunos = new Alunos();
$where = $alunos>getDefaultAdapter()>quoteInto('nome = ?','zico');$registro = $alunos>fetchRow($where);
$registro>nome = 'zeca';$registro>save();
OPA, MAS ESSE É O PADRAO ACTIVE RECORD!
![Page 72: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/72.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Row:Criar Objetos = Incluir Registros
require_once('Zend/Db.php');require_once('Zend/Config/Xml.php');require_once('Alunos.php');
$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$alunos = new Alunos();
$registro = $alunos>createRow();$registro>nome = 'Chiquinho';$registro>save();
![Page 73: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/73.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Row:O Objeto Apaga o Registro (Ele Mesmo!)
require_once('Zend/Db.php');require_once('Zend/Config/Xml.php');require_once('Alunos.php');
$config = new Zend_Config_Xml('config.xml','development');
$db = Zend_Db::factory($config>db>adapter,$config>db>config>toArray());
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$alunos = new Alunos();
$registro = $alunos>fetchRow("nome = 'Chiquinho'");$registro>delete();
![Page 74: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/74.jpg)
Desenvolvendo em Zend Framework
Zend_Db_Row:E se os dados mudarem?
Quando o objeto Zend_Db_Row é recuperado através de uma consulta, ele retorna com os dados do banco naquele momento. Atualizações no banco não são propagadas automaticamente para o objeto.
Para carregar o objeto com os dados atualizados, use o método refresh().
![Page 75: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/75.jpg)
Desenvolvendo em Zend Framework
Monitore as Operações do Banco
$profiler = $db>getProfiler();
Isso retorna uma instância de objeto Zend_Db_Profiler. Com essa instância, o desenvolvedor pode examinar suas consultas usando uma variedade de métodos:
●getTotalNumQueries() retorna o número total de consultas que foram executadas.
●getTotalElapsedSecs() retorna o número total de segundos transcorridos para todas as consultas executadas.
●getQueryProfiles() retorna um vetor de todos os perfis de consulta.
●getLastQueryProfile() retorna o último (mais recente) perfil de consulta, não obstante a consulta tenha ou não terminado. (se não tiver, a hora de término será nula)
![Page 76: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/76.jpg)
Desenvolvendo em Zend Framework
Monitore as Operações do Banco
●clear() limpa quaisquer perfis de consulta passados da pilha.
O valor de retorno de getLastQueryProfile() e os elementos individuais degetQueryProfiles() são objetos Zend_Db_Profiler_Query, que provêem a habilidadede inspecionar as consultas individuais por elas mesmas:
●getQuery() retorna o texto SQL da consulta. O texto SQL de uma declaração preparada com parâmetros é o texto no momento em que a consulta for preparada, assim ela contém espaços reservados para valores de parâmetro, não os valores usados quando a declaração é executada.●
●getQueryParams() retorna um vetor de valores de parâmetro usados quando executar uma consulta preparada. Isso inclui tanto parâmetros de combinação quanto argumentos para o método execute() de declaração. As chaves do vetor são ●índices de parâmetro posicionais (baseados em 1) ou nomeados (string).●
●getElapsedSecs() retorna o número de segundo que a consulta levou para rodar.
![Page 77: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/77.jpg)
Desenvolvendo em Zend Framework
Terei que fazer tudo isso?
Pode usar o projeto mínimo pra começar, ele está disponível em
www.fgsl.eti.br.
Lembre-se de que é apenas um dos layouts possíveis para uma
aplicação.
![Page 78: Desenvolvimento Rápido com Zend Framework e Eclipse](https://reader030.vdocuments.pub/reader030/viewer/2022020723/54ba80164a79590b158b466a/html5/thumbnails/78.jpg)
Onde encontro ajuda?
http://framework.zend.com
www.zfbrasil.com
Tem um livro também, sabe...
Desenvolvendo em Zend Framework