gpt4 book ai didi

symfony - 每次重新加载页面时,如何强制 Assetic 呈现 Assets ?

转载 作者:行者123 更新时间:2023-12-04 00:22:15 26 4
gpt4 key购买 nike

每次重新加载页面时,如何强制 Assets 呈现 Assets (无论 Assets 是否被修改)?

关于我的问题的更多解释:

我目前正在开发一个 Symfony2 项目,在该项目中我使用 Assetic 来管理和编译 .less 文件。我一切正常,但我有一个小问题需要解决。

在 config.yml 中,我将 Assets use_controller 设置为 true。

# Assetic Configuration
assetic:
debug: %kernel.debug%
use_controller: true

结果是每次修改 .less 文件时,Symfony 都会动态呈现新的 .css 文件。这很棒。

我的问题是我使用了一个主要的 project.less 文件,我在其中导入了所有其他 .less 文件
// Import Twitter Bootstrap
@import "../../../../../../vendor/twitter/bootstrap/less/bootstrap.less";

// Import Foo
@import "foo.less";

...

它允许我保持一个干净的结构,也可以从供应商那里导入 .less 文件,例如:twitter bootstrap。

在我的 Twig 模板中,我只调用这个主文件。
{% stylesheets '@ProjectWebBundle/Resources/public/less/project.less' filter='less' %}
<link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
{% endstylesheets %}

由于这个主要的 .less 文件永远不会被修改,Assetic 不会重新编译 Assets 。这就是为什么我希望无论文件是否被修改都可以渲染文件。

最佳答案

我也在使用 Assetic 的 Lessphp 过滤器来缓存文件。对于我自己,我创建了一个扩展默认 Assetic 过滤器的类,并使用当前时间处理每个文件

<?php

namespace Xxx\AssetsBundle\Assetic\Filter;

use Assetic\Asset\AssetInterface;
use Assetic\Filter\LessphpFilter;

class LessphpNonCachedFilter extends LessphpFilter
{
public function filterLoad(AssetInterface $asset)
{
$root = $asset->getSourceRoot();
$path = $asset->getSourcePath();

$filename = realpath($root . '/' . $path);

if (file_exists($filename)) {
touch($filename);
}

parent::filterLoad($asset);
}
}

并且您必须在参数部分 (services.yml) 中设置“assetic.filter.lessphp.class”:
parameters:
assetic.filter.lessphp.class: Xxx\AssetsBundle\Assetic\Filter\LessphpNonCachedFilter

关于symfony - 每次重新加载页面时,如何强制 Assetic 呈现 Assets ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12075812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com