在我的项目中,我使用下面的代码向资产添加了一些命名的资产,其中一个使用了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没有提交(它正在等待测试),但它是几行代码,您可以手动添加,只是为了确认它是您正在寻找的修复。