kekrozsak/vendor/doctrine/doctrine-bundle/Doctrine/Bundle/DoctrineBundle/Controller/ProfilerController.php
2012-07-15 14:56:31 +02:00

69 lines
2.1 KiB
PHP

<?php
/*
* This file is part of the Doctrine Bundle
*
* The code was originally distributed inside the Symfony framework.
*
* (c) Fabien Potencier <fabien@symfony.com>
* (c) Doctrine Project, Benjamin Eberlei <kontakt@beberlei.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Doctrine\Bundle\DoctrineBundle\Controller;
use Symfony\Component\DependencyInjection\ContainerAware;
use Symfony\Component\HttpFoundation\Response;
/**
* ProfilerController.
*
* @author Christophe Coevoet <stof@notk.org>
*/
class ProfilerController extends ContainerAware
{
/**
* Renders the profiler panel for the given token.
*
* @param string $token The profiler token
* @param string $connectionName
* @param integer $query
*
* @return Response A Response instance
*/
public function explainAction($token, $connectionName, $query)
{
/** @var $profiler \Symfony\Component\HttpKernel\Profiler\Profiler */
$profiler = $this->container->get('profiler');
$profiler->disable();
$profile = $profiler->loadProfile($token);
$queries = $profile->getCollector('db')->getQueries();
if (!isset($queries[$connectionName][$query])) {
return new Response('This query does not exist.');
}
$query = $queries[$connectionName][$query];
if (!$query['explainable']) {
return new Response('This query cannot be explained.');
}
/** @var $connection \Doctrine\DBAL\Connection */
$connection = $this->container->get('doctrine')->getConnection($connectionName);
try {
$results = $connection->executeQuery('EXPLAIN '.$query['sql'], $query['params'], $query['types'])
->fetchAll(\PDO::FETCH_ASSOC);
} catch (\Exception $e) {
return new Response('This query cannot be explained.');
}
return $this->container->get('templating')->renderResponse('DoctrineBundle:Collector:explain.html.twig', array(
'data' => $results,
'query' => $query,
));
}
}