From fb177a8527914844f9e48166d5b72959b41f6bda Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo <1102197+priyadi@users.noreply.github.com> Date: Tue, 6 Feb 2024 01:30:14 +0700 Subject: [PATCH] feat: Web profiler bundle integration. --- CHANGELOG.md | 1 + composer.json | 5 ++++- src/Debug/MapperDataCollector.php | 11 ++++++++--- templates/data_collector.html.twig | 29 +++++++++++++++++++++++++++++ templates/map.svg | 1 + tests/Common/TestKernel.php | 5 +++++ 6 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 templates/data_collector.html.twig create mode 100644 templates/map.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ad7901c..2c6fcda4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 0.6.2 * feat: Data collector. +* feat: Web profiler bundle integration. ## 0.6.1 diff --git a/composer.json b/composer.json index efe8dea7..79f197c2 100644 --- a/composer.json +++ b/composer.json @@ -45,12 +45,15 @@ "symfony/http-kernel": "^6.4 || ^7.0", "symfony/phpunit-bridge": "^6.4 || ^7.0", "symfony/uid": "^6.4 || ^7.0", + "symfony/twig-bundle": "^6.4 || ^7.0", "symfony/var-dumper": "^6.4 || ^7.0", + "symfony/web-profiler-bundle": "^6.4 || ^7.0", "vimeo/psalm": "^5.18", "dave-liddament/php-language-extensions": "^0.6.0", "dave-liddament/phpstan-php-language-extensions": "^0.5.0", "brick/money": "^0.9.0", - "tomasvotruba/unused-public": "^0.3.5" + "tomasvotruba/unused-public": "^0.3.5", + "twig/twig": "^2.12|^3.0" }, "autoload": { "psr-4": { diff --git a/src/Debug/MapperDataCollector.php b/src/Debug/MapperDataCollector.php index 84ca90e3..39e29726 100644 --- a/src/Debug/MapperDataCollector.php +++ b/src/Debug/MapperDataCollector.php @@ -14,14 +14,14 @@ namespace Rekalogika\Mapper\Debug; use Rekalogika\Mapper\Transformer\Contracts\TransformerInterface; +use Symfony\Bundle\FrameworkBundle\DataCollector\AbstractDataCollector; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpKernel\DataCollector\DataCollector; use Symfony\Component\PropertyInfo\Type; -final class MapperDataCollector extends DataCollector +final class MapperDataCollector extends AbstractDataCollector { - public function getName() + public function getName(): string { return 'rekalogika_mapper'; } @@ -70,4 +70,9 @@ public function getMappings(): array /** @var array */ return $this->data['mappings']; } + + public static function getTemplate(): string + { + return "@RekalogikaMapper/data_collector.html.twig"; + } } diff --git a/templates/data_collector.html.twig b/templates/data_collector.html.twig new file mode 100644 index 00000000..32957301 --- /dev/null +++ b/templates/data_collector.html.twig @@ -0,0 +1,29 @@ +{% block menu %} + + {{ source('@RekalogikaMapper/map.svg') }} + Mapper + +{% endblock %} + +{% block panel %} +

Mapper

+
+ + + + + + + + + {% for tracedata in collector.mappings %} + + + + + + + {% endfor %} +
PathSourceTargetTransformer
{{ tracedata.path }}{{ profiler_dump(tracedata.source) }}{{ profiler_dump(tracedata.target) }}{{ tracedata.transformerClass|abbr_class }}
+
+{% endblock %} diff --git a/templates/map.svg b/templates/map.svg new file mode 100644 index 00000000..5de94bac --- /dev/null +++ b/templates/map.svg @@ -0,0 +1 @@ + diff --git a/tests/Common/TestKernel.php b/tests/Common/TestKernel.php index 337fe283..f9732f35 100644 --- a/tests/Common/TestKernel.php +++ b/tests/Common/TestKernel.php @@ -31,6 +31,8 @@ use Rekalogika\Mapper\Transformer\TraversableToArrayAccessTransformer; use Rekalogika\Mapper\Transformer\TraversableToTraversableTransformer; use Symfony\Bundle\FrameworkBundle\FrameworkBundle; +use Symfony\Bundle\TwigBundle\TwigBundle; +use Symfony\Bundle\WebProfilerBundle\WebProfilerBundle; use Symfony\Component\Config\Loader\LoaderInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Kernel; @@ -48,12 +50,15 @@ public function __construct(private array $config = []) public function registerBundles(): iterable { yield new FrameworkBundle(); + yield new TwigBundle(); + yield new WebProfilerBundle(); yield new RekalogikaMapperBundle(); } public function registerContainerConfiguration(LoaderInterface $loader): void { $loader->load(function (ContainerBuilder $container) { + $container->setParameter('kernel.secret', 'test'); $container->loadFromExtension('framework', [ 'http_method_override' => false, 'handle_all_throwables' => true,