Вход Регистрация
Файл: 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 $generator, Profiler $profiler = null, Twig_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($phpinfo, 200, 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;
    }
}
Онлайн: 3
Реклама