Symfony - 使用资产查找资产名称

时间:2017-03-23 08:42:24

标签: symfony assets assetic symfony-3.1

我想知道控制器中我的资产的名称。我使用资产,因此资产名称是随机的。

例如对于我的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资产名称?我如何自动找到资产路径?

1 个答案:

答案 0 :(得分:2)

当您阅读包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 }}

就足够了