Desenvolvimento orientado a objetos com
PEAR:
DB/MDB2, DB_DataObject,
HTML_QuickForm e
DB_DataObjectFormBuilder
Adriano Gonçalves adriano.php4@gmail.comAgenda
✔
O PEAR e suas vantagensAbstração de banco de dados com DB/MDB2 Mapeamento objetos-BD relacional com
DB_DataObject
Construção dinâmica de formulários com HTML_QuickForm
HTML_QuickForm e Smarty
Gerando formulários automaticamente com DB_DataObjectFormBuilder – exemplo prático
O que é PEAR
● Significa “PHP Extension and Application
Repository”
● Tem o propósito de prover:
– Uma biblioteca estruturada de de códigos open-source p/ usuários PHP
– Um sistema de distribuição de código e manutenção de pacotes
– Um padrão de codificação para PHP – Um estrutura online para suportar a
comunidade de usuários
Vantagens de usar pacotes PEAR
● Estrutura de pacotes constantemente atualizada
e mantida por vários desenvolvedores
● Suporte a Orientação a Objetos
● Códigos desenvolvidos sob um padrão alto de
qualidade
● Instalador automático de pacotes
● Ótima documentação disponível
● Comunidade de usuários e desenvolvedores
● Dezenas de pacotes disponíveis, para os
Agenda
✔
O PEAR e suas vantagens✔
Abstração de banco de dados com DB/MDB2Mapeamento objetos-BD relacional com DB_DataObject
Construção dinâmica de formulários com HTML_QuickForm
HTML_QuickForm e Smarty
Gerando formulários automaticamente com DB_DataObjectFormBuilder – exemplo prático
Abstração de banco de dados
● Permite criar aplicações portáveis
entre diferentes SGBDs
● Algumas bibliotecas disponíveis para
PHP: – ADODB – DBX – Metabase – PEAR::DB – PEAR::MDB2 SGBD CAMADA DE ABSTRAÇÃO APLICAÇÃO PHP
PEAR::DB
● API de banco de dados orientada a objetos
● Formato DSN por array ou por URL para configurar o
acesso ao banco
● Objeto de retorno das querys ● Suporte a LIMIT
● Suporte a transações
● Suporte a sequências (emulado)
● Suporta os seguintes SGBD: fbsql, ibase, informix,
msql, mssql, mysql, mysqli, oci8, odbc, pgsql, sqlite, sybase
PEAR::MDB2
● Veio substituir a DB
● Veio da união dos recursos do Metabase e
PEAR::DB
● Trouxe uma série de recursos novos
● Atualmente suporta os seguintes SGBD: MySQL,
MySQLi (só no PHP5), PostgreSQL, Oracle,
Frontbase, Querysim, Interbase/Firebird, MSSQL, SQLite
DB - Conectando
<?phprequire_once 'DB.php';
$dsn = 'pgsql://usuario:senha@localhost/phpconf'; $db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage()); }
$db->disconnect(); ?>
DB - Enviando uma query
...$res =& $db->query('SELECT * FROM clients'); if (PEAR::isError($res)) {
die($res->getMessage()); }
DB - Query com substituição de valores
...$sth = $db->prepare('INSERT INTO numbers VALUES (?, ?, ?)');
$data = array(1, 'one', 'en'); $db->execute($sth, $data); ?>
DB - Transações
...$db->autoCommit(false);
$db->query('INSERT INTO blah (a) VALUES (11)'); $res =& $db->query('SELECT b FROM blue');
while ($res->fetchInto($row, DB_FETCHMODE_ORDERED)) { if ($row[0] == 'problem') { $db->rollback(); } } $res->free(); $db->commit();
MDB2 - Conectando
● Possui três métodos: factory, singleton e connect
$mdb2 =& MDB2::singleton($dsn); if (PEAR::isError($mdb2)) {
die($mdb2->getMessage()); }
MDB2 – Enviando uma query
$sql = "SELECT * FROM c lients";$mdb2->setLimit(20, 10);
$affected =& $mdb2->exec($sql); $sql = "DELETE FROM clients";
if ($mdb2->supported('limit_queries') === 'emulated') echo 'offset will likely be ignored'
$mdb2->setLimit(10);
Agenda
✔
O PEAR e suas vantagens✔
Abstração de banco de dados com DB/MDB2✔
Mapeamento objetos-BD relacional com DB_DataObjectConstrução dinâmica de formulários com HTML_QuickForm
HTML_QuickForm e Smarty
Gerando formulários automaticamente com DB_DataObjectFormBuilder – exemplo prático
Mapeamento objetos–BD relacional
● Problemas:
– Dois universos: OO e relacional
– Tempo gasto para desenvolver a persistência
manualmente
– Acoplamento com o SGBD
– SQL entre os objetos
– Manutenção menos eficiente
● Os SGBD relacionais estão evoluídos e confiáveis,
Mapeamento objetos–BD relacional
●
Propostas de soluções:
– Objetos DAO (o programador ainda precisa
programar SQL e o mapeamento)
Mapeamento objetos–BD relacional
● Algumas características que uma camada de
persistência deve ter:
– Encapsulamento completo da camada de dados
– Identificadores de objeto
– Mecanismo de recuperação de registros
– Suporte a diversas versões e fabricantes de SGBDs – Permitir uso de querys SQL para casos extremos
Mapeamento objetos–BD relacional
● Porque adotar esquemas de persistência
– Ganho de tempo na implementação
– Aumenta a qualidade do produto final
PEAR::DB_DataObject
● Provê uma API para acessar e manipular os dados de
forma simples
● Estrutura extensível, Orientada a Objetos
● Trabalha com comandos de alto nível (fetch, insert,
update, delete
● Gera e atualiza códigos das classes das tabelas
● Validação básica de dados automática (como strings e
inteiros)
● Debug bem completo, em vários níveis ● Suporte avançado a tabelas relacionadas
Agenda
✔
O PEAR e suas vantagens✔
Abstração de banco de dados com DB/MDB2✔
Mapeamento objetos-BD relacional com DB_DataObject✔
Construção dinâmica de formulários com HTML_QuickFormHTML_QuickForm e Smarty
Gerando formulários automaticamente com DB_DataObjectFormBuilder – exemplo prático
PEAR::HTML_QuickForm
● Provê métodos para criar,
validar e processar formulários HTML
● Provê validação client-side
(javascript) e server-side
● Oferece suporte a diversos
tipos de campos de formulário
● Provê formas de personalizar
a aparência do formulário com templates
PEAR::HTML_QuickForm - Exemplo
Agenda
✔
O PEAR e suas vantagens✔
Abstração de banco de dados com DB/MDB2✔
Mapeamento objetos-BD relacional com DB_DataObject✔
Construção dinâmica de formulários com HTML_QuickForm✔
HTML_QuickForm e SmartyGerando formulários automaticamente com DB_DataObjectFormBuilder – exemplo prático
O que é o Smarty
● Um sistema de templates para PHP que...:
– Visa separar interface da lógica de programação – “Compila” os templates em arquivos PHP, evitando
processamento adicional
– Possui um sistema de cache para melhorar a
performance
– Possui uma poderosa mas simples linguagem de
templates
– Muitas outras vantagens que podem ser vistas em
Exemplo
● Utilizando o método $form->toArray() ● Exemplo de template
Agenda
✔
O PEAR e suas vantagens✔
Abstração de banco de dados com DB/MDB2✔
Mapeamento objetos-BD relacional com DB_DataObject✔
Construção dinâmica de formulários com HTML_QuickForm✔
HTML_QuickForm e Smarty✔
Gerando formulários automaticamente com DB_DataObjectFormBuilder – exemplo práticoReferências
● PEAR Manual ● http://pear.php.net ● http://www.imasters.com.br ● http://www.mundooo.com.br/ ● http://cirofeitosa.com.br/ ● http://davidmintz.org/presentations/show.php/QuickFo rm_and_Smarty/ ● http://www.midnighthax.com/quickform.php ● GoogleContato
● Meu e-mail: adriano.php4@gmail.com ● Meu website: http://adriano.ison.com.br/