Symfony - Assetic有时不会对从bundle中创建的命名资源应用过滤器


Symfony - Assetic sometimes don't apply filters to named assets created form bundle

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

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;
        }
    }
}

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

我也注意到,它停止工作时,我编辑任何bundle扩展类(DependencyInjection/[BundleName] extension .php)。

有人知道我做错了什么吗?

我怀疑这是因为这里报告的问题。Assetic代码中有一个错误,会在渲染过程中错误地"清除"资源的过滤器,因此它们永远不会被应用。

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

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