WARNING: You are browsing the documentation for Symfony 3.4 which is not maintained anymore. Consider upgrading your projects to Symfony 5.2.

How to Work with Compiler Passes in Bundles

How to Work with Compiler Passes in Bundles

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 “Creating Separate Compiler Passes”.

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):

// 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)

        $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.

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.