ToolbarController.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace Drupal\webprofiler\Controller;
  3. use Drupal\Component\Serialization\Json;
  4. use Drupal\Core\Controller\ControllerBase;
  5. use Drupal\Core\Render\RendererInterface;
  6. use Drupal\webprofiler\Profiler\Profiler;
  7. use Drupal\webprofiler\Profiler\TemplateManager;
  8. use Symfony\Component\DependencyInjection\ContainerInterface;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\HttpKernel\Profiler\Profile;
  13. /**
  14. * Class ToolbarController
  15. */
  16. class ToolbarController extends ControllerBase {
  17. /**
  18. * @var \Drupal\webprofiler\Profiler\Profiler
  19. */
  20. private $profiler;
  21. /**
  22. * @var \Drupal\webprofiler\Profiler\TemplateManager
  23. */
  24. private $templateManager;
  25. /**
  26. * @var \Drupal\Core\Render\RendererInterface
  27. */
  28. private $renderer;
  29. /**
  30. * {@inheritdoc}
  31. */
  32. public static function create(ContainerInterface $container) {
  33. return new static(
  34. $container->get('profiler'),
  35. $container->get('template_manager'),
  36. $container->get('renderer')
  37. );
  38. }
  39. /**
  40. * Constructs a new WebprofilerController.
  41. *
  42. * @param \Drupal\webprofiler\Profiler\Profiler $profiler
  43. * @param \Drupal\webprofiler\Profiler\TemplateManager $templateManager
  44. * @param \Drupal\Core\Render\RendererInterface $renderer
  45. */
  46. public function __construct(Profiler $profiler, TemplateManager $templateManager, RendererInterface $renderer) {
  47. $this->profiler = $profiler;
  48. $this->templateManager = $templateManager;
  49. $this->renderer = $renderer;
  50. }
  51. /**
  52. * Generates the toolbar.
  53. *
  54. * @param Profile $profile
  55. *
  56. * @return \Symfony\Component\HttpFoundation\Response
  57. *
  58. * @throws \Exception
  59. */
  60. public function toolbarAction(Profile $profile) {
  61. $this->profiler->disable();
  62. $templates = $this->templateManager->getTemplates($profile);
  63. $rendered = '';
  64. foreach ($templates as $name => $template) {
  65. $rendered .= $template->renderBlock('toolbar', [
  66. 'collector' => $profile->getcollector($name),
  67. 'token' => $profile->getToken(),
  68. 'name' => $name
  69. ]);
  70. }
  71. $toolbar = [
  72. '#theme' => 'webprofiler_toolbar',
  73. '#toolbar' => $rendered,
  74. '#token' => $profile->getToken(),
  75. ];
  76. return new Response($this->renderer->render($toolbar));
  77. }
  78. /**
  79. * @param \Symfony\Component\HttpKernel\Profiler\Profile $profile
  80. * @param \Symfony\Component\HttpFoundation\Request $request
  81. *
  82. * @return \Symfony\Component\HttpFoundation\JsonResponse
  83. */
  84. public function savePerformanceTimingAction(Profile $profile, Request $request) {
  85. $this->profiler->disable();
  86. $data = Json::decode($request->getContent());
  87. /** @var $collector */
  88. $collector = $profile->getCollector('performance_timing');
  89. $collector->setData($data);
  90. $this->profiler->updateProfile($profile);
  91. return new JsonResponse(['success' => TRUE]);
  92. }
  93. }