How to Work with Compiler Passes in Bundles
Warning: You are browsing the documentation for Symfony 3.x, which is no longer maintained.
Read the updated version of this page for Symfony 7.1 (the current stable version).
Compiler passes give you an opportunity to manipulate other service definitions that have been registered with the service container. You can read about how to create them in the components section "Compiling the Container".
When using separate compiler passes,
you need to register them in the build()
method of the bundle class (this
is not needed when implementing the process()
method in the extension):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// src/AppBundle/AppBundle.php
namespace AppBundle;
use AppBundle\DependencyInjection\Compiler\CustomPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AppBundle extends Bundle
{
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->addCompilerPass(new CustomPass());
}
}
One of the most common use-cases of compiler passes is to work with
"service tags". If you are using
custom tags in a bundle then by convention, tag names consist of the name of
the bundle (lowercase, underscores as separators), followed by a dot, and
finally the "real" name. For example, if you want to introduce some sort of
"transport" tag in your AcmeMailerBundle, you should call it
acme_mailer.transport
.