One of the comments of the "Disable elements in the Symfony developer toolbar" post was the question to do the same thing with a compiler pass instead of overwriting the definitions with the services.yml
Wouldn't it be a cleaner approach to have a compiler pass that would just override the service tag priority? That way, we wouldn't need to figure out the classes and arguments for the service.
Which is a valid point, so I looked into it and found a solution.
Within my custom CompilerPass
I remove the tags responsible for the data collectors being shown in the toolbar. I now only need a list of the data collector ids and don't need to know about the construction arguments of the specific collectors.
class DataCollectorCompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$collectorsToRemove = [
'data_collector.form',
'data_collector.translation',
'data_collector.logger',
'data_collector.ajax',
'data_collector.twig'
];
foreach($collectorsToRemove as $dataCollector) {
if (!$container->hasDefinition($dataCollector)) {
continue;
}
$definition = $container->getDefinition($dataCollector);
$definition->clearTags();
}
}
}
The CompilerPass
is then being added as part of the bundle class.
class LiplexBackendBundle extends Bundle
{
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->addCompilerPass(new DataCollectorCompilerPass());
}
}
Very important:
You have to put your bundle before the FrameworkBundle
within your AppKernel:registerBundles
function. Otherwise the data collectors are already added as part of the ProfilerPass
before your CompilerPass
is run and your changes are just ignored.