如何解决Symfony2对CompilerPass的解释?
| 有人可以解释什么是编译器通过吗?解决方法
CompilerPass
实现是某种侦听器,在从配置文件构建依赖项注入容器之后,将其保存为纯PHP之前在缓存中执行。它们用于构建一些结构,这些结构需要从外部资源访问定义,或者需要一些XML / YAML配置中不可用的编程。您可以将它们视为可以修改整个DIC的“最终过滤器”。
让我们考虑一个TwigBundle及其TwigEnvironmentPass。它的作用非常简单:
获取对“ 1”服务的引用(定义为“ 2”)
查找所有已标记“ 3”标记的服务。为此,您需要使用完整的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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。