Symfony - Assetic有时不会将过滤器应用于从包创建的命名资产

时间:2014-08-07 12:16:04

标签: php symfony assetic lessphp

在我的项目中,我使用下面的代码向资产添加一些命名资产,其中一个使用lessphp过滤器。

public function prepend(ContainerBuilder $container)
{
    $configs = $container->getExtensionConfig($this->getAlias());
    $config = $this->processConfiguration(new Configuration(), $configs);

    $this->configureAsseticBundle($container, $config);
}

protected function configureAsseticBundle(ContainerBuilder $container, array $config)
{
    foreach (array_keys($container->getExtensions()) as $name) {
        switch ($name) {
            case 'assetic':
                $container->prependExtensionConfig(
                    $name,
                    array(
                        'assets' => array(
                            'some_less' => array(
                                'inputs' => array(
                                    '@SomeBundle/Resources/public/less/some.less'
                                ),
                                'filters' => array('lessphp'),
                            ),
                        )
                    )
                );
                break;
        }
    }
}

当我使用assetic转储资产时:转储一切在生产环境中正常工作但在开发环境中,此命名资产的lessphp过滤器仅在几次页面刷新后才起作用,经过一段时间后它不再起作用我需要删除所有缓存。删除缓存后再次正常工作......几分钟......

我还注意到当我编辑任何包扩展类(DependencyInjection / [BundleName] Extension.php)时它停止工作。

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

我怀疑这是因为问题reported here。 Assetic代码中存在一个错误,它会在渲染过程中错误地“清除”资产的过滤器,因此永远不会应用它们。

您应该可以通过使用php app/console cache:clear清除缓存来可靠地重现它。但是,您应该能够通过完全删除开发缓存文件并重新加载页面来“修复”它。

我引用的PR未提交(它正在等待测试),但是您可以手动添加几行代码以确认它是您正在寻找的修复。