Criação de perfis de consultas no Zend Framework

Às vezes, você precisa armazenar todas ou algumas consultas para depurar porpuses. Vamos pensar que você irá armazená-los em seu banco de dados para que possa criar um controlador principal onde o resto deve fazer isso ou, melhor ainda, acho que você pode criar um plug-in ZF, então vamos ver como funciona!

<?php
class My_Plugin_Profiler extends Zend_Controller_Plugin_Abstract
{
public function postDispatch()
{
$db
= Zend_Registry::get('db');
$profiler
= $db->getProfiler();

// we set the filter
$profiler
->setFilterQueryType(
Zend_Db_Profiler::SELECT |
Zend_Db_Profiler::INSERT |
Zend_Db_Profiler::UPDATE |
Zend_Db_Profiler::DELETE);

$profile
= $profiler->getQueryProfiles(
Zend_Db_Profiler::INSERT |
Zend_Db_Profiler::UPDATE |
Zend_Db_Profiler::DELETE);

$logs
= new Logs_Model_DbTable_Log();

/* if the filter has no content the is null
otherwise it will be an array and we have

to prevent if to get no error here */

if(is_array($profile))
{
foreach($profile as $row)
{
$data
= array(
'sql' => $row->getQuery(),
'bind_params' => implode(', ', $row->getQueryParams()),
);
$logs
->insert($data);
}
}
}
}
?>

No código acima, eu filtro, seleciono, insiro, atualizo e excluo consultas, mas depois recebo apenas inserir, atualizar e excluir.

Claro que é necessário registrar este plugin para este trabalho e como estamos usando a função postDispatch (), nos certificamos de que cada consulta será armazenada no final do despacho.