2017-03-23 28 views
0

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

例如,对于我的CSS,在我的枝条我:

{% 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资产名称?我如何自动找到资产路径?

回答

2

当你阅读包的源代码kriswallsmith/assetic你就会意识到,这不是小事让你的名字资产 (资产有非常独特的名字),他们是getNames()阵列中的模板appeararance的顺序。

解决的办法之一是使用命名资产

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' 

你可能还需要运行COMMAND_ 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 }}