Вход Регистрация
Файл: symfony-2.7/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php
Строк: 503
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyBundleWebProfilerBundleController;

use 
SymfonyComponentHttpFoundationResponse;
use 
SymfonyComponentHttpFoundationRedirectResponse;
use 
SymfonyComponentHttpKernelExceptionNotFoundHttpException;
use 
SymfonyComponentHttpKernelProfilerProfiler;
use 
SymfonyComponentHttpFoundationSessionFlashAutoExpireFlashBag;
use 
SymfonyComponentHttpFoundationRequest;
use 
SymfonyBundleWebProfilerBundleProfilerTemplateManager;
use 
SymfonyComponentRoutingGeneratorUrlGeneratorInterface;

/**
 * ProfilerController.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class ProfilerController
{
    private 
$templateManager;
    private 
$generator;
    private 
$profiler;
    private 
$twig;
    private 
$templates;
    private 
$toolbarPosition;

    
/**
     * Constructor.
     *
     * @param UrlGeneratorInterface $generator       The URL Generator
     * @param Profiler              $profiler        The profiler
     * @param Twig_Environment     $twig            The twig environment
     * @param array                 $templates       The templates
     * @param string                $toolbarPosition The toolbar position (top, bottom, normal, or null -- use the configuration)
     */
    
public function __construct(UrlGeneratorInterface $generatorProfiler $profiler nullTwig_Environment $twig, array $templates$toolbarPosition 'normal')
    {
        
$this->generator $generator;
        
$this->profiler $profiler;
        
$this->twig $twig;
        
$this->templates $templates;
        
$this->toolbarPosition $toolbarPosition;
    }

    
/**
     * Redirects to the last profiles.
     *
     * @return RedirectResponse A RedirectResponse instance
     *
     * @throws NotFoundHttpException
     */
    
public function homeAction()
    {
        if (
null === $this->profiler) {
            throw new 
NotFoundHttpException('The profiler must be enabled.');
        }

        
$this->profiler->disable();

        return new 
RedirectResponse($this->generator->generate('_profiler_search_results', array('token' => 'empty''limit' => 10)), 302, array('Content-Type' => 'text/html'));
    }

    
/**
     * Renders a profiler panel for the given token.
     *
     * @param Request $request The current HTTP request
     * @param string  $token   The profiler token
     *
     * @return Response A Response instance
     *
     * @throws NotFoundHttpException
     */
    
public function panelAction(Request $request$token)
    {
        if (
null === $this->profiler) {
            throw new 
NotFoundHttpException('The profiler must be enabled.');
        }

        
$this->profiler->disable();

        
$panel $request->query->get('panel''request');
        
$page $request->query->get('page''home');

        if (!
$profile $this->profiler->loadProfile($token)) {
            return new 
Response($this->twig->render('@WebProfiler/Profiler/info.html.twig', array('about' => 'no_token''token' => $token)), 200, array('Content-Type' => 'text/html'));
        }

        if (!
$profile->hasCollector($panel)) {
            throw new 
NotFoundHttpException(sprintf('Panel "%s" is not available for token "%s".'$panel$token));
        }

        return new 
Response($this->twig->render($this->getTemplateManager()->getName($profile$panel), array(
            
'token' => $token,
            
'profile' => $profile,
            
'collector' => $profile->getCollector($panel),
            
'panel' => $panel,
            
'page' => $page,
            
'request' => $request,
            
'templates' => $this->getTemplateManager()->getTemplates($profile),
            
'is_ajax' => $request->isXmlHttpRequest(),
        )), 
200, array('Content-Type' => 'text/html'));
    }

    
/**
     * Purges all tokens.
     *
     * @return Response A Response instance
     *
     * @throws NotFoundHttpException
     */
    
public function purgeAction()
    {
        if (
null === $this->profiler) {
            throw new 
NotFoundHttpException('The profiler must be enabled.');
        }

        
$this->profiler->disable();
        
$this->profiler->purge();

        return new 
RedirectResponse($this->generator->generate('_profiler_info', array('about' => 'purge')), 302, array('Content-Type' => 'text/html'));
    }

    
/**
     * Displays information page.
     *
     * @param string $about The about message
     *
     * @return Response A Response instance
     *
     * @throws NotFoundHttpException
     */
    
public function infoAction($about)
    {
        if (
null === $this->profiler) {
            throw new 
NotFoundHttpException('The profiler must be enabled.');
        }

        
$this->profiler->disable();

        return new 
Response($this->twig->render('@WebProfiler/Profiler/info.html.twig', array(
            
'about' => $about,
        )), 
200, array('Content-Type' => 'text/html'));
    }

    
/**
     * Renders the Web Debug Toolbar.
     *
     * @param Request $request The current HTTP Request
     * @param string  $token   The profiler token
     *
     * @return Response A Response instance
     *
     * @throws NotFoundHttpException
     */
    
public function toolbarAction(Request $request$token)
    {
        if (
null === $this->profiler) {
            throw new 
NotFoundHttpException('The profiler must be enabled.');
        }

        
$session $request->getSession();

        if (
null !== $session && $session->isStarted() && $session->getFlashBag() instanceof AutoExpireFlashBag) {
            
// keep current flashes for one more request if using AutoExpireFlashBag
            
$session->getFlashBag()->setAll($session->getFlashBag()->peekAll());
        }

        if (
'empty' === $token || null === $token) {
            return new 
Response(''200, array('Content-Type' => 'text/html'));
        }

        
$this->profiler->disable();

        if (!
$profile $this->profiler->loadProfile($token)) {
            return new 
Response(''404, array('Content-Type' => 'text/html'));
        }

        
// the toolbar position (top, bottom, normal, or null -- use the configuration)
        
if (null === $position $request->query->get('position')) {
            
$position $this->toolbarPosition;
        }

        
$url null;
        try {
            
$url $this->generator->generate('_profiler', array('token' => $token));
        } catch (
Exception $e) {
            
// the profiler is not enabled
        
}

        return new 
Response($this->twig->render('@WebProfiler/Profiler/toolbar.html.twig', array(
            
'position' => $position,
            
'profile' => $profile,
            
'templates' => $this->getTemplateManager()->getTemplates($profile),
            
'profiler_url' => $url,
            
'token' => $token,
        )), 
200, array('Content-Type' => 'text/html'));
    }

    
/**
     * Renders the profiler search bar.
     *
     * @param Request $request The current HTTP Request
     *
     * @return Response A Response instance
     *
     * @throws NotFoundHttpException
     */
    
public function searchBarAction(Request $request)
    {
        if (
null === $this->profiler) {
            throw new 
NotFoundHttpException('The profiler must be enabled.');
        }

        
$this->profiler->disable();

        if (
null === $session $request->getSession()) {
            
$ip =
            
$method =
            
$url =
            
$start =
            
$end =
            
$limit =
            
$token null;
        } else {
            
$ip $session->get('_profiler_search_ip');
            
$method $session->get('_profiler_search_method');
            
$url $session->get('_profiler_search_url');
            
$start $session->get('_profiler_search_start');
            
$end $session->get('_profiler_search_end');
            
$limit $session->get('_profiler_search_limit');
            
$token $session->get('_profiler_search_token');
        }

        return new 
Response($this->twig->render('@WebProfiler/Profiler/search.html.twig', array(
            
'token' => $token,
            
'ip' => $ip,
            
'method' => $method,
            
'url' => $url,
            
'start' => $start,
            
'end' => $end,
            
'limit' => $limit,
            
'request' => $request,
        )), 
200, array('Content-Type' => 'text/html'));
    }

    
/**
     * Renders the search results.
     *
     * @param Request $request The current HTTP Request
     * @param string  $token   The token
     *
     * @return Response A Response instance
     *
     * @throws NotFoundHttpException
     */
    
public function searchResultsAction(Request $request$token)
    {
        if (
null === $this->profiler) {
            throw new 
NotFoundHttpException('The profiler must be enabled.');
        }

        
$this->profiler->disable();

        
$profile $this->profiler->loadProfile($token);

        
$ip $request->query->get('ip');
        
$method $request->query->get('method');
        
$url $request->query->get('url');
        
$start $request->query->get('start'null);
        
$end $request->query->get('end'null);
        
$limit $request->query->get('limit');

        return new 
Response($this->twig->render('@WebProfiler/Profiler/results.html.twig', array(
            
'token' => $token,
            
'profile' => $profile,
            
'tokens' => $this->profiler->find($ip$url$limit$method$start$end),
            
'ip' => $ip,
            
'method' => $method,
            
'url' => $url,
            
'start' => $start,
            
'end' => $end,
            
'limit' => $limit,
            
'panel' => null,
        )), 
200, array('Content-Type' => 'text/html'));
    }

    
/**
     * Narrows the search bar.
     *
     * @param Request $request The current HTTP Request
     *
     * @return Response A Response instance
     *
     * @throws NotFoundHttpException
     */
    
public function searchAction(Request $request)
    {
        if (
null === $this->profiler) {
            throw new 
NotFoundHttpException('The profiler must be enabled.');
        }

        
$this->profiler->disable();

        
$ip preg_replace('/[^:d.]/'''$request->query->get('ip'));
        
$method $request->query->get('method');
        
$url $request->query->get('url');
        
$start $request->query->get('start'null);
        
$end $request->query->get('end'null);
        
$limit $request->query->get('limit');
        
$token $request->query->get('token');

        if (
null !== $session $request->getSession()) {
            
$session->set('_profiler_search_ip'$ip);
            
$session->set('_profiler_search_method'$method);
            
$session->set('_profiler_search_url'$url);
            
$session->set('_profiler_search_start'$start);
            
$session->set('_profiler_search_end'$end);
            
$session->set('_profiler_search_limit'$limit);
            
$session->set('_profiler_search_token'$token);
        }

        if (!empty(
$token)) {
            return new 
RedirectResponse($this->generator->generate('_profiler', array('token' => $token)), 302, array('Content-Type' => 'text/html'));
        }

        
$tokens $this->profiler->find($ip$url$limit$method$start$end);

        return new 
RedirectResponse($this->generator->generate('_profiler_search_results', array(
            
'token' => $tokens $tokens[0]['token'] : 'empty',
            
'ip' => $ip,
            
'method' => $method,
            
'url' => $url,
            
'start' => $start,
            
'end' => $end,
            
'limit' => $limit,
        )), 
302, array('Content-Type' => 'text/html'));
    }

    
/**
     * Displays the PHP info.
     *
     * @return Response A Response instance
     *
     * @throws NotFoundHttpException
     */
    
public function phpinfoAction()
    {
        if (
null === $this->profiler) {
            throw new 
NotFoundHttpException('The profiler must be enabled.');
        }

        
$this->profiler->disable();

        
ob_start();
        
phpinfo();
        
$phpinfo ob_get_clean();

        return new 
Response($phpinfo200, array('Content-Type' => 'text/html'));
    }

    
/**
     * Gets the Template Manager.
     *
     * @return TemplateManager The Template Manager
     */
    
protected function getTemplateManager()
    {
        if (
null === $this->templateManager) {
            
$this->templateManager = new TemplateManager($this->profiler$this->twig$this->templates);
        }

        return 
$this->templateManager;
    }
}
Онлайн: 1
Реклама