【发布时间】:2015-07-20 07:35:12
【问题描述】:
我使用的是 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');
}
奇怪的是,如果我在任何控制器中调用 $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 文件中更改某些内容,它确实可以工作
有人能指出正确的方向吗?
【问题讨论】:
-
不必使用编译器通行证来覆盖现有服务 - 服务定义就足够了。您确定您使用的是正确的服务 ID 吗?我使用的是 2.6,在这个版本中它是
templating.asset.url_package。 -
是的,他们改变了这一点,所有的 templating.assets 设置也被弃用了,资产现在是它自己的东西,而且,urlpackage 是一个可以被覆盖的参数,现在它不是:( - symfony.com/blog/new-in-symfony-2-7-the-new-asset-component