TwigClockworkDataSource.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. /**
  3. * @package Grav\Common\Twig
  4. *
  5. * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
  6. * @license MIT License; see LICENSE file for details.
  7. */
  8. namespace Grav\Common\Twig;
  9. use Clockwork\DataSource\DataSource;
  10. use Clockwork\Request\Request;
  11. use Twig\Environment;
  12. use Twig\Extension\ProfilerExtension;
  13. use Twig\Profiler\Profile;
  14. /**
  15. * Class TwigClockworkDataSource
  16. * @package Grav\Common\Twig
  17. */
  18. class TwigClockworkDataSource extends DataSource
  19. {
  20. /** @var Environment */
  21. protected $twig;
  22. /** @var Profile */
  23. protected $profile;
  24. // Create a new data source, takes Twig instance as an argument
  25. public function __construct(Environment $twig)
  26. {
  27. $this->twig = $twig;
  28. }
  29. /**
  30. * Register the Twig profiler extension
  31. */
  32. public function listenToEvents(): void
  33. {
  34. $this->twig->addExtension(new ProfilerExtension($this->profile = new Profile()));
  35. }
  36. /**
  37. * Adds rendered views to the request
  38. *
  39. * @param Request $request
  40. * @return Request
  41. */
  42. public function resolve(Request $request)
  43. {
  44. $timeline = (new TwigClockworkDumper())->dump($this->profile);
  45. $request->viewsData = array_merge($request->viewsData, $timeline->finalize());
  46. return $request;
  47. }
  48. }