Как работать с пропусками компилятора в пакетах

Как работать с пропусками компилятора в пакетах

Пропуски компилятора предоставляют вам возможность производить манипуляции с другими определениями сервиса, которые были зарегистрированы в сервис- контейнере. Вы можете прочитать о том, как создать их в разделе компоненты "Execute Code During Compilation".

При использовании отдельных пропусков компилятора, вам нужно зарегистрировать их в методе build() класса пакета (это не нужно при реализации метода process() в расширении):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// src/AppBundle/AppBundle.php
namespace AppBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use AppBundle\DependencyInjection\Compiler\CustomPass;

class AppBundle extends Bundle
{
    public function build(ContainerBuilder $container)
    {
        parent::build($container);

        $container->addCompilerPass(new CustomPass());
    }
}

Одним из наиболее распространённых примером использования пропусков компилятора является работа с тегированными сервисами (прочитайте больше о тегах в "How to Work with Service Tags"). Если вы используете пользовательские теги в пакете, тогда, по соглашению, имена тегов состоят из имени пакета (строчные буквы, нижние подчёркивания в качестве разделителей), за которыми следует точка, а в конце - "настоящее" имя. Например, если вы хотите представить некий тег "транспорт" в вашем AcmeMailerBundle, то вы должны назвать его acme_mailer.transport.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.