0

我编写了自己的 Assetic 过滤器,包含在 Symfony2 Bundle 中,以便将 CommonJS 模块编译到单个文件中。它被称为cjsDeliveryBundle,但我们暂时把它放在一边。

我希望能够在我的config_dev.ymlconfig_prod.yml文件中的过滤器上设置不同的选项。

过滤器有一个 public setter: setMinifyIdentifiers,它接受一个布尔值。我阅读了有关setter 注入的 Symfony2 文档,并将以下内容添加到我的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>

过滤器工作正常,除了 setter 永远不会true作为参数调用。我究竟做错了什么?

4

1 回答 1

0

知道了。解决方案是为每个环境设置单独的 YAML 参数文件,并在每个环境中指定过滤器参数。

所以这就是我在我的情况下所做的。

  1. - { resource: parameters.yml }从 中的imports:指令中删除config.yml
  2. 删除parameters.yml文件并将参数放在两个新文件中:parameters_dev.ymlparameters_prod.yml.
  3. 添加- { resource: parameters_dev.yml }imports:指令 inconfig_dev.yml和指令- { resource: parameters_prod.yml }in 。imports:config_prod.yml
  4. 添加matt_cg.cjs_delivery_filter.minify_identifiers: true到. parameters:_parameters_prod.yml
于 2013-03-20T00:42:38.013 回答