.. index:: single: Dependency Injection; Compiler passes single: Service Container; Compiler passes
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 ":doc:`/components/dependency_injection/compilation`". To register a compiler pass from a bundle you need to add it to the build method of the bundle definition class:
// src/Acme/MailerBundle/AcmeMailerBundle.php namespace Acme\MailerBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; use Symfony\Component\DependencyInjection\ContainerBuilder; use Acme\MailerBundle\DependencyInjection\Compiler\CustomCompilerPass; class AcmeMailerBundle extends Bundle { public function build(ContainerBuilder $container) { parent::build($container); $container->addCompilerPass(new CustomCompilerPass()); } }
One of the most common use-cases of compiler passes is to work with tagged services
(read more about tags in the components section ":doc:`/components/dependency_injection/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
.