123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- <?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,
- ));
- }
- }
|