Новое в Symfony 5.2: Более простые сборщики данных

Профилировщик Symfony использует сборщики данных для сбора всей отладочной информации, которая позже отображается на панели инструментов и профилировщике. Эти сборщики данных представляют собой службы, классы которых реализуют DataCollectorInterface.

Если сборщик данных включает шаблоны Twig для отображения своих данных, вы должны зарегистрировать службу вручную, чтобы определить шаблон для использования. Например, при использовании YAML для конфигурации:

# config/services.yaml
services:
    App\DataCollector\MyCustomDataCollector:
        tags:
            -
                name:     data_collector
                template: 'data_collector/template.html.twig'
                id:       'app.my_custom_collector'

В Symfony 5.2 упростили создание собственных сборщиков данных с введением нового класса AbstractDataCollector. Если вы расширите этот класс в своих пользовательских сборщиках, вы можете дополнительно определить следующие методы:

// src/DataCollector/MyCustomDataCollector.php
namespace App\DataCollector;

use Symfony\Bundle\FrameworkBundle\DataCollector\AbstractDataCollector;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\DataCollector\DataCollector;

class MyCustomDataCollector extends AbstractDataCollector
{
    // ...

    public function collect(Request $request, Response $response, \Throwable $exception = null)
    {
        $this->data = '...';
    }

    public static function getTemplate(): ?string
    {
        return 'data_collector/template.html.twig';
    }

    public function getName()
    {
        return 'app.my_custom_collector';
    }
}

Это оно! При использовании конфигурации службы по умолчанию с автоконфигурацией Symfony автоматически зарегистрирует этот сборщик данных и будет использовать его, начиная со следующего запроса. Вам больше не нужно регистрировать сервисы вручную.

Единственное предостережение заключается в том, что приоритет сборщика нельзя настроить таким образом, поэтому вам все равно придется зарегистрировать службу вручную, чтобы установить приоритет.