I’m on symfony 2.7 and need to override SymfonyComponentAssetUrlPackage
I’ve looked at http://symfony.com/doc/current/cookbook/bundles/override.html and http://symfony.com/doc/current/cookbook/service_container/compiler_passes.html but can’t get it working.
I have made a file in my bundle MyAppCoreBundleOverridesUrlPackage; I registered UrlPackage as a service and added a function:
public function process(ContainerBuilder $container) { $definition = $container->getDefinition('assets.url_package'); $definition->setClass('MyAppCoreBundleOverridesUrlPackage'); }
The weird thing is, if I call $this->has('assets.url_package')
in any controller, it returns false.
I did grab it from the services file under Symfony:
<service id="assets.url_package" class="SymfonyComponentAssetUrlPackage" abstract="true"> <argument /> <!-- base URLs --> <argument type="service" /> <!-- version strategy --> <argument type="service" id="assets.context" /> </service>
If I run php app/console debug:container
, the UrlPackage from symfony isn’t in there, but, if I change something inside the vendor/*/UrlPackge file, it does work
Can someone point me in the right direction?
Advertisement
Answer
Decorating the service is the thing you’re looking for:
bar: public: false class: stdClass decorates: foo arguments: ["@bar.inner"]
You can inject the original service in your own service, and implement the original interface to make them compatible.
http://symfony.com/doc/2.7/service_container/service_decoration.html