感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
Compiler passes了给你一个机会去操纵“已经在服务容器中注册过的”其他服务定义。你可以阅读组件部分的“在编译过程中执行代码” 来了解如何去创建它们。
当使用独立的Compiler Passes时,你需要在bundle类的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());
}
} |
compiler passes一个最常见的用例是使用标打了签标的服务(参考 如何操作服务的标签”)。如果你在bundle中使用了自定义的标签,即可依照惯例,标签名称应该包含“bundle名”(小写字母,以下划线作为分隔),跟着的是一个英文逗点,最后是“真正”的tag名称。例如,如果你想在AcmeMailerBundle类中使用某个“transport”标签,你应该把它命名为acme_mailer.transport
。
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。