Cro*_*zin 25
CompilerPass
实现是在从配置文件构建依赖注入容器之后以及在缓存中将其保存为普通PHP之前执行的某种侦听器.它们用于构建一些需要从外部资源访问定义的结构,或者需要一些XML/YAML配置中不可用的编程.您可以将它们视为可以修改整个DIC的"最终过滤器".
让我们考虑一下TwigBundle及其TwigEnvironmentPass.它的作用很简单:
twig
服务的引用(定义为<service id="twig" class="..." ...>
)twig.extension
tag的所有服务.为此,您可以使用完整的DIC(从XML配置文件构建),因为这些服务可能在任何捆绑中定义.作为最终结果,将生成以下代码:
protected function getTwigService()
{
$this->services['twig'] = $instance = new \Twig_Environment($this->get('twig.loader'), ...);
// THIS HAS BEEN ADDED THANKS TO THE TwigEnvironmentPass:
$instance->addExtension(new \Symfony\Bundle\SecurityBundle\Twig\Extension\SecurityExtension($this->get('security.context')));
$instance->addExtension(new \Symfony\Bundle\TwigBundle\Extension\TransExtension($this->get('translator')));
$instance->addExtension(new \Symfony\Bundle\TwigBundle\Extension\TemplatingExtension($this));
$instance->addExtension(new \Symfony\Bundle\TwigBundle\Extension\FormExtension(array(0 => 'TwigBundle::form.html.twig', 1 => 'SiteBundle::widgets.html.twig')));
$instance->addExtension(new \MyProject\SiteBundle\Twig\Extension\MyVeryOwnExtensionToTwig($this));
return $instance;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1142 次 |
最近记录: |