Top Banner
 Desenvolvendo em Zend Framework Ênfase no Zend_Db www.fgsl.eti.br Permitida a livre reprodução e cópia desde que citada a fonte
79

Desenvolvimento Rápido com Zend Framework e Eclipse

Jan 17, 2015

Download

Technology

Flávio Lisboa

Palestra proferida no dia 28 de novembro na PHP Conference Brasil 2008
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Desenvolvimento Rápido com Zend Framework e Eclipse

   

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

   

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

   

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

   

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

   

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

   

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

   

Editando um arquivo PHP no Eclipse

Desenvolvendo em Zend Framework

Page 8: Desenvolvimento Rápido com Zend Framework e Eclipse

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

Desenvolvendo em Zend Framework

Page 25: Desenvolvimento Rápido com Zend Framework e Eclipse

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

Desenvolvendo em Zend Framework

Encerrando a Conexão

$db­>closeConnection();

Page 52: Desenvolvimento Rápido com Zend Framework e Eclipse

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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­>db­config­>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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

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

   

Onde encontro ajuda?

http://framework.zend.com

www.zfbrasil.com

Tem um livro também, sabe...

Desenvolvendo em Zend Framework

Page 79: Desenvolvimento Rápido com Zend Framework e Eclipse

   

Contato: [email protected]

Desenvolvendo em Zend Framework

FOI UMA GRANDE HONRA!