You are here

ToolbarController.php in Devel 8.3

File

webprofiler/src/Controller/ToolbarController.php
View source
<?php

namespace Drupal\webprofiler\Controller;

use Drupal\Component\Serialization\Json;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Render\RendererInterface;
use Drupal\webprofiler\Profiler\Profiler;
use Drupal\webprofiler\Profiler\TemplateManager;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Profiler\Profile;

/**
 * Class ToolbarController.
 */
class ToolbarController extends ControllerBase {

  /**
   * @var \Drupal\webprofiler\Profiler\Profiler
   */
  private $profiler;

  /**
   * @var \Drupal\webprofiler\Profiler\TemplateManager
   */
  private $templateManager;

  /**
   * @var \Drupal\Core\Render\RendererInterface
   */
  private $renderer;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('profiler'), $container
      ->get('template_manager'), $container
      ->get('renderer'));
  }

  /**
   * Constructs a new WebprofilerController.
   *
   * @param \Drupal\webprofiler\Profiler\Profiler $profiler
   * @param \Drupal\webprofiler\Profiler\TemplateManager $templateManager
   * @param \Drupal\Core\Render\RendererInterface $renderer
   */
  public function __construct(Profiler $profiler, TemplateManager $templateManager, RendererInterface $renderer) {
    $this->profiler = $profiler;
    $this->templateManager = $templateManager;
    $this->renderer = $renderer;
  }

  /**
   * Generates the toolbar.
   *
   * @param \Symfony\Component\HttpKernel\Profiler\Profile $profile
   *
   * @return \Symfony\Component\HttpFoundation\Response
   *
   * @throws \Exception
   */
  public function toolbarAction(Profile $profile) {
    $this->profiler
      ->disable();
    $templates = $this->templateManager
      ->getTemplates($profile);
    $rendered = '';
    foreach ($templates as $name => $template) {
      $rendered .= $template
        ->renderBlock('toolbar', [
        'collector' => $profile
          ->getcollector($name),
        'token' => $profile
          ->getToken(),
        'name' => $name,
      ]);
    }
    $toolbar = [
      '#theme' => 'webprofiler_toolbar',
      '#toolbar' => $rendered,
      '#token' => $profile
        ->getToken(),
    ];
    return new Response($this->renderer
      ->render($toolbar));
  }

  /**
   * @param \Symfony\Component\HttpKernel\Profiler\Profile $profile
   * @param \Symfony\Component\HttpFoundation\Request $request
   *
   * @return \Symfony\Component\HttpFoundation\JsonResponse
   */
  public function savePerformanceTimingAction(Profile $profile, Request $request) {
    $this->profiler
      ->disable();
    $data = Json::decode($request
      ->getContent());

    /** @var  $collector */
    $collector = $profile
      ->getCollector('performance_timing');
    $collector
      ->setData($data);
    $this->profiler
      ->updateProfile($profile);
    return new JsonResponse([
      'success' => TRUE,
    ]);
  }

}

Classes

Namesort descending Description
ToolbarController Class ToolbarController.