Symfony - 使用 assetic 查找资产名称

Symfony - Find asset name with assetic

我想知道控制器中我的资产的名称。我用的是assetic,所以assets的名字是随机的

例如,对于我的 css,在我的 Twig 中我有:

{% block stylesheets %}
    {% stylesheets filter='uglifycss' filter='cssrewrite'
        'assets/css/bootstrap.min.css'
        'assets/css/core.css'
    %}
        <link rel="stylesheet" href="{{ asset(asset_url) }}" />
    {% endstylesheets %}
{% endblock %}

结果:

<link rel="stylesheet" href="http://local.example.com/css/c491e8f-285c78f.css" />

现在,我想在我的控制器中自动找到名称 c491e8f-285c78f.css。 我试过了:

var_dump($this->get('assetic.asset_manager')->getNames(),
         $this->get('assetic.asset_manager')->get('c491e8f')->getTargetPath());

结果:

array(3) {
    [0] => string(7) "c491e8f"
    [1] => string(7) "b011b98"
    [2] => string(7) "f4e7a09"
}
string(35) "_controller/css/c491e8f-285c78f.css"

还不错,但我作弊找到了 "c491e8f" 名称...我怎么知道这是我的 css 资产名称?以及如何自动找到资产路径?

当您阅读 bundle kriswallsmith/assetic 的源代码时,您会意识到获取资产的名称并非易事 (资产具有真正独特的名称)并且它们按照模板中出现的顺序位于 getNames() 数组中。

其中一个解决方案是使用命名资产

http://symfony.com/doc/current/assetic/asset_management.html#using-named-assets

在config.yml中:

assets:
    bootstrap_and_core:
        inputs:
            - 'assets/css/bootstrap.min.css'
            - 'assets/css/core.css'

您可能还需要 运行 命令_php app/console assetic:dump

然后:

var_dump($this->get('assetic.asset_manager')->get('bootstrap_and_core')->getTargetPath());

string 'assetic/bootstrap_and_core.css' (length=30)

姓名:

var_dump($this->get('assetic.asset_manager')->getNames());

array (size=1)
  0 => string 'bootstrap_and_core' (length=18)

树枝:

{% block stylesheets %}
    {% stylesheets filter='uglifycss' filter='cssrewrite'
        '@bootstrap_and_core'
    %}
        <link rel="stylesheet" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}

另请注意: 您不必使用 {{ asset(asset_url) }} - {{ asset_url }}

就足够了