2012-02-29 28 views
6

Tôi đang cố gắng hiểu gói symfony2 assetic. Tôi đang cố gắng sử dụng plugin jquery sử dụng tệp css của chính nó. Tôi đã đặt tất cả mọi thứ trong mybundle/Resources/public và sau đó chia thành images/javascript/và css/Cung cấp hình ảnh tương đối bằng cách sử dụng assetic

Các plugin css đang sử dụng đường dẫn tương đối để có được những hình ảnh như ../images/sprite.png

Sử dụng assetic để phục vụ các tập tin css:

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

Đường dẫn được tạo bởi assetic là /app_dev.php/css/mycss.css, đúng là tôi đoán. Rõ ràng là các đường dẫn hình ảnh tương đối hiện không hoạt động nữa. Vì các tệp này nằm trong mybundle/Resources/public và không có trong/images/

Khi cố gắng sử dụng bộ lọc cssrewrite, các đường dẫn được viết lại thành: http://server.com/Resources/public/images/sprite.png. Nhưng điều này tôi không chính xác, các tập tin không nằm ở đó.

Làm cách nào để tôi có thể phục vụ các hình ảnh có liên quan bằng cách sử dụng tính năng xác thực?

+0

Tôi đã hỏi một câu hỏi tương tự: http://stackoverflow.com/questions/9500573/path-of-assets-in-css-files-in-symfony2 (bạn cũng có thể xem các cố gắng của mình để giải quyết nó ở đó) – apfelbox

Trả lời

4

Bạn có thể đánh vần đường dẫn đầu ra và không sử dụng cssrewrite.

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

Và sau đó tất nhiên bạn sử dụng assets:install để sao chép hình ảnh của bạn để web/bundles/bundle/images hoặc bất cứ nơi nào. Theo như trình duyệt có liên quan, css và hình ảnh của bạn bây giờ nằm ​​tương đối với nhau. Trong quá trình sản xuất, bạn sẽ sử dụng assetic:dump để di chuyển tệp css được tạo ra thực tế.

+2

Khi sử dụng giải pháp này, đường dẫn trong môi trường dev cho hình ảnh là: app_dev.php/bundles/mybundle/images/sprite.png, kết quả là NotFoundHttpException. Bạn cũng có một giải pháp để phục vụ họ dev env? – dvcrn

+0

Vì hình ảnh có xu hướng không thay đổi nên tôi chỉ sử dụng nội dung: cài đặt để cài đặt chúng trên máy tính của tôi. Vì vậy, trong khi css được tạo động các hình ảnh chỉ cần ngồi ở đó. Bạn có thể sử dụng tùy chọn --symlink để tránh phải tạo bản sao thực. – Cerad

+0

Tôi đoán tôi đã mô tả sai vấn đề của mình một chút. Khi có "app.php" hoặc "app_dev.php" trong url của tôi (ví dụ: app.php/bundles/mybundle/images/sprite.png), kết quả là 404. Khi rời khỏi app.php/app_dev .php (ví dụ: bundles/mybundle/images/sprite.png), đường dẫn là tốt và hình ảnh đang được phục vụ. Assetic phục vụ các tệp css thông qua môi trường hiện tại của bạn. Nếu bạn đang sử dụng app_dev.php, nó cũng có trong tất cả các url kiểu được tạo ra được hỗ trợ. Có nghĩa là tất cả các đường dẫn hình ảnh tương đối (bên trong các tệp .css) cũng đang sử dụng app_dev.php, dẫn đến url tôi đã đề cập ở trên. – dvcrn

Các vấn đề liên quan