Desenvolvimento orientado a objetos com PEAR: DB/MDB2, DB_DataObject, HTML_QuickForm e DB_DataObjectFormBuilder Adriano Gonçalves adriano.php4@gmail.com
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á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 Resumindo: facilitar a vida do desenvolvedor
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 diversos tipos de aplicação
PEAR Variedade de pacotes
Manual do PEAR
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á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 APLICAÇÃO PHP CAMADA DE ABSTRAÇÃO SGBD
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 <?php require_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); $affected =& $mdb2->exec($sql);
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á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, sendo atualmente a melhor opção
Mapeamento objetos BD relacional Propostas de soluções: Objetos DAO (o programador ainda precisa programar SQL e o mapeamento) Camada de persistência
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 Extensibilidade
Mapeamento objetos BD relacional Porque adotar esquemas de persistência Ganho de tempo na implementação Aumenta a qualidade do produto final Diminui a possibilidade de erros de codificação
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_QuickForm HTML_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 (Extraído do Manual do PEAR)
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 Smarty Gerando 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 http://smarty.php.net/
Exemplo Utilizando o método $form->toarray() Exemplo de template
Um exemplo mais avançado...
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ático
Perguntas?
Referê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 Google
Contato Meu e-mail: adriano.php4@gmail.com Meu website: http://adriano.ison.com.br/