2012-02-29 67 views
6

我試圖理解symfony2資產捆綁。 我想使用一個jQuery插件,它使用它自己的CSS文件。我把一切都放在mybundle/Resources/public,然後分裂成圖像/ JavaScript的/和css/使用資產服務相關圖像

的插件CSS是使用相對路徑來獲得類似../images/sprite.png

使用assetic服務的CSS文件中的圖像:

{% stylesheets 
    '@MyBundle/Resources/public/css/mycss.css' 
%} 
<link rel="stylesheet" href="{{ asset_url }}" /> 
{% endstylesheets %} 

資產生成的路徑是/app_dev.php/css/mycss.css,這是我猜的。很顯然,現在相對的圖像路徑不再適用了。由於這些文件本身位於mybundle/Resources/public中,而不在/ images/

當嘗試使用cssrewrite過濾器時,路徑被重寫爲: http://server.com/Resources/public/images/sprite.png。但是,我不正確,文件不在那裏。

我如何提供使用資產的相對圖像?

+0

我問了一個類似的問題:http://stackoverflow.com/questions/9500573/path-of-assets-in-css-files-in-symfony2(你可以看到我的設法也在那裏解決它) – apfelbox 2012-02-29 15:41:35

回答

4

你可以拼出輸出路徑,根本不使用cssrewrite。

{% stylesheets output="bundles/zaysoarbiter/css/forms2.css" 
    '@ZaysoArbiterBundle/Resources/public/css/forms2.css' 
%} 

然後當然你用assets:install將圖像複製到web/bundles/bundle/images或其他地方。就瀏覽器而言,您的CSS和圖像現在相對於彼此而言是相互位置的。在生產中,您將使用assetic:dump來移動實際生成的css文件。

+2

使用此解決方案時,圖像的dev環境路徑爲:app_dev.php/bundles/mybundle/images/sprite.png,這會導致NotFoundHttpException。你是否也有解決方案來爲他們提供開發環境? – dvcrn 2012-03-01 08:17:50

+0

由於圖像不會改變,我只是使用asset:install將它們安裝到我的開發機器上。所以,當CSS動態生成時,圖像就坐在那裏。您可以使用--symlink選項來避免必須進行實際複製。 – Cerad 2012-03-01 15:07:48

+0

我想我錯誤地描述了我的問題。當我的網址中有「app.php」或「app_dev.php」時(例如:app.php/bundles/mybundle/images/sprite.png),結果是404。 離開app.php/app_dev .php(例如:bundles/mybundle/images/sprite.png),路徑很好,圖像被傳送。 Assetic通過當前環境提供css文件。如果您使用的是app_dev.php,那麼它也適用於所有資產生成的樣式網址。意思是所有相關的圖片路徑(在.css文件中)也使用app_dev.php,導致上面提到的url。 – dvcrn 2012-03-01 15:56:17