2013-03-19 38 views
0

爲了將CommonJS模塊編譯爲單個文件,我已經編寫了屬於Symfony2 Bundle的自己的Assetic過濾器。這叫做cjsDeliveryBundle,但現在讓我們暫且擱置。將參數從config.yml傳遞到Assetic filter服務

我希望能夠在我的config_dev.ymlconfig_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我的包。

<?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. imports:指令在config.yml取出- { resource: parameters.yml }
  2. 刪除parameters.yml文件,並將參數置於兩個新文件中:parameters_dev.ymlparameters_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_prod.yml中的parameters:指令中。