Как работать с пропусками компилятора в пакетах¶
Пропуски компилятора предоставляют вам возможность производить манипуляции с другими определениями сервиса, которые были зарегистрированы в сервис- контейнере. Вы можете прочитать о том, как создать их в разделе компоненты "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.