2015-07-20 2 views
4

Я на Symfony 2.7 и необходимо переопределить Symfony \ Component \ Asset \ UrlPackageSymfony: Игнорирование обслуживание Symfony (составитель передача)

Я смотрел на 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') в любом контроллере, он возвращает ложь. я захватить его из файла услуги под 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, то UrlPackage из Symfony не там, но, если я что-то изменить в файле поставщика/*/UrlPackge, это делает работу

Может кто-нибудь указать мне в правильном направлении?

+2

Это не должно быть необходимо использовать компилятор передает переопределить существующую услугу - определение услуг должно быть достаточно. Вы уверены, что используете правильный идентификатор службы? Я использую 2.6, и в этой версии это 'templating.asset.url_package'. – mickadoo

+0

Да, они изменили это, все настройки templating.assets также устарели, активы теперь что-то на своем собственном, также urlpackage был параметром, который можно было бы перезаписать, теперь это не :(- http://symfony.com/блог/новый-в-Symfony-2-7-заместитель нового актива-компонента – Mazzy

ответ

4

Украшать сервис это то, что вы ищете:

bar: 
    public: false 
    class: stdClass 
    decorates: foo 
    arguments: ["@bar.inner"] 

Вы можете придать оригинальную услугу в собственном сервис и реализовать оригинальный интерфейс, чтобы сделать их совместимыми.

http://symfony.com/doc/2.7/service_container/service_decoration.html

Смежные вопросы