我在 symfony 2.7 上,需要覆盖 Symfony\Component\Asset\UrlPackage
我看过http://symfony.com/doc/current/cookbook/bundles/override.html 和 http://symfony.com/doc/current/cookbook/service_container/compiler_passes.html 但无法正常工作。
我在我的包 MyApp\CoreBundle\Overrides\UrlPackage 中创建了一个文件; 我将 UrlPackage 注册为服务并添加了一个功能:
public function process(ContainerBuilder $container)
{
$definition = $container->getDefinition('assets.url_package');
$definition->setClass('MyApp\CoreBundle\Overrides\UrlPackage');
}
奇怪的是,如果我在任何 Controller 中调用 $this->has('assets.url_package')
,它都会返回 false。
我确实从 Symfony 下的服务文件中获取了它:
<service id="assets.url_package" class="Symfony\Component\Asset\UrlPackage" abstract="true">
<argument /> <!-- base URLs -->
<argument type="service" /> <!-- version strategy -->
<argument type="service" id="assets.context" />
</service>
如果我运行 php app/console debug:container
,symfony 的 UrlPackage 不在那里,但是,如果我更改 vendor/*/UrlPackge 文件中的某些内容,它确实有效
有人能指出我正确的方向吗?
最佳答案
装饰服务是您要找的东西:
bar:
public: false
class: stdClass
decorates: foo
arguments: ["@bar.inner"]
可以在自己的服务中注入(inject)原有的服务,实现原有的接口(interface),使其兼容。
http://symfony.com/doc/2.7/service_container/service_decoration.html
关于php - Symfony:覆盖 Symfony 服务(编译器通过),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31511019/