我在 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');
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我调用$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>
Run Code Online (Sandbox Code Playgroud)
如果我运行php app/console debug:container,来自 symfony 的 UrlPackage 不在那里,但是,如果我在 vendor/*/UrlPackge 文件中更改某些内容,它确实有效
有人可以指出我正确的方向吗?
装饰服务是您正在寻找的东西:
bar:
public: false
class: stdClass
decorates: foo
arguments: ["@bar.inner"]
Run Code Online (Sandbox Code Playgroud)
您可以在自己的服务中注入原始服务,并实现原始接口使其兼容。
http://symfony.com/doc/2.7/service_container/service_decoration.html
| 归档时间: |
|
| 查看次数: |
2443 次 |
| 最近记录: |