2013-03-19 5 views
0

Я написал собственный фильтр Assetic, содержащийся в пакете Symfony2, чтобы скомпилировать модули CommonJS в один файл. Это называется cjsDeliveryBundle, но давайте оставим это в стороне на данный момент.Передача аргументов службе Assetic filter из config.yml

Я хочу, чтобы иметь возможность устанавливать различные параметры в фильтре из моих config_dev.yml и config_prod.yml файлов.

Фильтр имеет один публичный сеттер: setMinifyIdentifiers, который принимает логическое значение. Я прочитал документацию Symfony2 на setter injection и добавил следующее к моему config.yml:

assetic: 
    filters: 
     cssrewrite: ~ 
     cjs_delivery: 
      resource: "%kernel.root_dir%/../src/MattCG/cjsDeliveryBundle/Resources/config/services.xml" 
      calls: 
       - [ setMinifyIdentifiers, [ true ] ] 

Ниже приводится services.xml для моего Bundle.

<?xml version="1.0" ?> 

<container xmlns="http://symfony.com/schema/dic/services" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> 

    <parameters> 
     <parameter key="matt_cg.cjs_delivery_filter.class">MattCG\cjsDeliveryBundle\Assetic\Filter\cjsDeliveryFilter</parameter> 
     <parameter key="matt_cg.cjs_delivery_filter.minify_identifiers">null</parameter> 
    </parameters> 

    <services> 
     <service id="matt_cg.cjs_delivery_filter" class="%matt_cg.cjs_delivery_filter.class%"> 
      <tag name="assetic.filter" alias="cjs_delivery"></tag> 
      <call method="setMinifyIdentifiers"> 
       <argument>%matt_cg.cjs_delivery_filter.minify_identifiers%</argument> 
      </call> 
     </service> 
    </services> 
</container> 

Фильтр работает отлично, за исключением того, что сеттер никогда не вызывается с true в качестве аргумента. Что я делаю не так?

ответ

0

Получил это. Решение состоит в том, чтобы иметь отдельные файлы параметров YAML для каждой среды и определять параметры фильтра в каждом из них.

Так вот что я сделал в своем случае.

  1. Удалите - { resource: parameters.yml } из imports: директивы в config.yml.
  2. Удалите файл parameters.yml и поместите здесь параметры в два новых файла: parameters_dev.yml и parameters_prod.yml.
  3. Добавить - { resource: parameters_dev.yml } в imports: директивы в config_dev.yml и - { resource: parameters_prod.yml } к imports: директивы в config_prod.yml.
  4. Добавить matt_cg.cjs_delivery_filter.minify_identifiers: true в директиву parameters: в parameters_prod.yml.

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

  • Нет связанных вопросов^_^