• Twitter
  • GitHub
  • Flickr
  • Skype
  • Contato

Blog

Envio e teste de e-mails em ambiente de desenvolvimento com Mailhog e MhSendmail: Olá! Estou de volta para demonstrar como podemos emular em nosso ambiente de...

Aplicação Silex com o Doctrine DBAL

No artigo anterior sobre o micro-framework, a conexão ao banco de dados se deu por meio de um bloco de código alheio ao ambiente proposto pelo Silex, foi escrito por não se ter um provedor de extensão registrado, como o DoctrineServiceProvider que fornece integração com o Doctrine DBAL e padroniza a aplicação.
Com o Provider devidamente registrado(exibido logo a seguir), será necessário passar o parâmetro db.options que usa como opção padrão o driver pdo_mysql, e fornece vários outros como: pdo_sqlite, pdo_pgsql, pdo_oci, oci8, ibm_db2, pdo_ibm, pdo_sqlsrv.

Em nossa app anterior podemos então remover tudo relacionado à conexao, o bloco de código existente não se encaixa com o padrão que será aplicado.

O Doctrine provider.
Em seu arquivo composer.json, adicione uma nova chamada de instalação para o Doctrine:

{
 "require":{
    "Silex/silex":"~1.3",
    "twig/twig": "^1.24",
    "doctrine/dbal":"~2.2"
  }
}
Rode o composer:
$ php composer.phar update

Veja no exemplo a seguir como é fácil registrar. O parâmetro db.options recebe por meio das opções avaliadas, seus valores.
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
    'db.options' => array(
        'driver' => 'pdo_mysql',
        'host' => 'localhost',
        'dbname' => 'consumo',
        'user' => 'root',
        'password' => '123',
        'charset' => 'utf8',
    ),
)); 

O Doctrine provider fornece um db service, não será mais necessário usar uma instância($database_handle), como no código anterior.
Veja sua utilizaçao em comparaçao ao modo publicado no artigo anterior.

Recurso '/listar' da apliaçao.

Parte do código da aplicação anterior para comparação:
...
$app->get("/listar", function() use($app,$database_handle){
...
 
$statement_handle = $database_handle->prepare("SELECT id,aparelho,uso_mes,uso_dia,mensal_kwh
                                               FROM estimativa
                                               ORDER BY id DESC");
$statement_handle->execute();
$response = $statement_handle->fetchAll(PDO::FETCH_ASSOC);
Com o Doctrine.
Agora o código com os recursos disponíveis:
...
// Use somente a instância $app 
$app->get("/listar", function() use($app){
...
 
$sql = "SELECT id,aparelho,uso_mes,uso_dia,mensal_kwh 
FROM estimativa
ORDER BY id DESC";
 
$response = $app['db']->fetchAll($sql);

Recurso '/publicar' da apliaçao.

Código antigo:
...
$app->match('/publicar', function(Request $request) use($app, $database_handle){ 
...
 
$statement_handle = $database_handle->prepare("INSERT INTO estimativa (aparelho,uso_mes,uso_dia,mensal_kwh)
VALUES (:aparelho,:uso_mes,:uso_dia,:mensal_kwh)");
 
$statement_handle->execute($post);

Com o Doctrine.
Agora o código com os recursos disponíveis:
...
// Use somente a instância $app 
$app->match('/publicar', function(Request $request) use($app){
...
 
$app['db']->insert('estimativa', $post);

Um código mais enxuto. Veja mais em: docs.doctrine-project.org/

A aplicação no GitHub. Ate!
[],s