2013-08-05 30 views
0

assets.yml:Symfony2中包括通過循環js文件從assetic.yml

assetic: 
    assets: 
     base_js: 
      inputs: 
       - '%kernel.root_dir%/Resources/public/jquery-1.10.2.min.js' 
       - '%kernel.root_dir%/Resources/public/bootstrap3/js/bootstrap.min.js' 
      output: 'js/scripts.js' 
     base_css: 
      inputs: 
       - '%kernel.root_dir%/Resources/public/bootstrap3/css/bootstrap.min.css' 
      output: 'js/styles.css' 

config.yml

imports: 
    - { resource: parameters.yml } 
    - { resource: security.yml } 
    - { resource: assets.yml } 

#... 

assetic: 
    debug:   %kernel.debug% 
    use_controller: false 
    bundles:  [MyAdminBundle] 
    #java: /usr/bin/java 
    filters: 
     cssrewrite: ~ 

而且在模板:

{% block javascripts %} 
    {% javascripts '@base_js' %} 
     <script src="{{ asset_url }}"></script> 
    {% endjavascripts %} 
{% endblock %} 

然而作爲輸出我得到j s/80e3acc_part_1.js並且此文件只包含jquery代碼,boostrap缺失。任何想法如何解決這一問題?

+0

prod或開發環境? – cheesemacfly

+0

@cheesemacfly dev environment –

+0

運行'php app/console assetic:dump --watch'時,你沒有錯誤嗎? – cheesemacfly

回答

1

可悲資產集合的輸出文件名配置當前不被使用的默認如果沒有在{% image %}{% stylesheets %}{% javascripts %}標籤中指定,如果只有一個@ -resource存在 - 這解釋文件名JS/80e3acc_part_1。 js

此外,asset()函數不適用於@ - 語法。

使用以下來修復文件名問題。

{% javascripts '@base_js' output='js/scripts.js' %} 
    <script src="{{ asset_url }}"></script> 
{% endjavascripts %} 

或者只是將輸出文件名直接包含在asset()函數中。

<script src="{{ asset('js/scripts.js') }}"></script> 

這句法是清潔的,但離開的情況下,具有如果您要重命名的輸出文件更改配置文件名和模板的缺點。

請注意,在大多數情況下資產不會自動更新緩存集合的資源(如果添加資源)。因此,在傾銷資產之前,請始終使用app/console cache:clear清除緩存。

這可以解釋爲什麼在轉儲後輸出文件中缺少引導程序,如果將其添加爲第二個資源但在使用assetic:dump命令之前未清除高速緩存。

+0

你最後一點只是SO上的一個錯字。我在開發和資產被設置爲use_controller:true,所以我不需要轉儲資產。我遵循了你的第一個建議,但是我仍然有同樣的問題。 –

+0

所以你1)清除你的緩存2)轉儲資產後3)使用我提出的解決方案之一(如果是的哪一個)? – nifr

+0

我建議你在這裏有兩個unwated行爲...輸出文件是'80e3acc'(因爲你在開發環境中使用調試選項而添加了'_part_1')而不是'js/script.js' ...並且轉儲的輸出文件中丟失的第二個文件(bootstrap.min.js)。您可以使用'asset()'函數驗證我的第二種解決方案嗎?引導文件仍然丟失在清理緩存的轉儲輸出中? – nifr