我编写了自己的Assetic过滤器,包含在Symfony2 Bundle中,以便将CommonJS模块编译成单个文件。它被称为cjsDeliveryBundle,但是现在让我们把它放在一边。
我希望能够从我的config_dev.yml
和config_prod.yml
文件中为过滤器设置不同的选项。
过滤器有一个公共setter:setMinifyIdentifiers
,它接受一个布尔值。我在setter injection上阅读了Symfony2文档,并将以下内容添加到我的config.yml
中:
assetic:
filters:
cssrewrite: ~
cjs_delivery:
resource: "%kernel.root_dir%/../src/MattCG/cjsDeliveryBundle/Resources/config/services.xml"
calls:
- [ setMinifyIdentifiers, [ true ] ]
以下是我的Bundle的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
作为参数调用setter。我做错了什么?
答案 0 :(得分:0)
知道了。解决方案是为每个环境提供单独的YAML参数文件,并在每个环境中指定过滤器参数。
所以这就是我在案件中所做的。
- { resource: parameters.yml }
中的imports:
指令中删除config.yml
。parameters.yml
文件并将参数放在两个新文件中:parameters_dev.yml
和parameters_prod.yml
。- { resource: parameters_dev.yml }
添加到imports:
中的config_dev.yml
指令,将- { resource: parameters_prod.yml }
添加到imports:
中的config_prod.yml
指令。matt_cg.cjs_delivery_filter.minify_identifiers: true
添加到parameters:
。{/ li>中的parameters_prod.yml
指令
醇>