Обслуживание относительных изображений с использованием активов

Я пытаюсь понять пакет активов symfony2. Я пытаюсь использовать плагин jquery, который использует собственный файл css. Я поместил все в mybundle/Resources/public, а затем разделил на изображения/javascript/ и css/

Плагины css используют относительные пути для получения изображений, таких как ../images/sprite.png

Использование актива для обслуживания файла css:

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

Путь, сгенерированный assets, равен /app_dev.php/css/mycss.css, что, я думаю, правильно. Очевидно, что относительные пути к изображениям больше не работают. Потому что сами файлы находятся в mybundle/Resources/public, а не в /images/

При попытке использовать фильтр cssrewrite пути переписываются на: http://server.com/Resources/public/images/sprite.png. Но это не правильно, файлы там не находятся.

Как я могу обслуживать относительные изображения, используя актив?


person dvcrn    schedule 29.02.2012    source источник
comment
Я задал аналогичный вопрос: stackoverflow.com/questions/9500573/ (вы также можете увидеть мои попытки решить эту проблему)   -  person apfelbox    schedule 29.02.2012


Ответы (1)


Вы можете указать выходной путь и вообще не использовать cssrewrite.

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

И затем, конечно, вы используете assets:install для копирования изображений в web/bundles/bundle/images или куда-то еще. Что касается браузера, ваш css и изображения теперь расположены относительно друг друга. В производстве вы будете использовать assetic:dump для перемещения фактического сгенерированного файла css.

person Cerad    schedule 29.02.2012
comment
При использовании этого решения путь в среде разработки для изображений: app_dev.php/bundles/mybundle/images/sprite.png, что приводит к NotFoundHttpException. У вас также есть решение для обслуживания их dev env? - person dvcrn; 01.03.2012
comment
Поскольку изображения, как правило, не меняются, я просто использую assets:install для их установки на мою машину разработчика. Таким образом, в то время как css генерируется динамически, изображения просто остаются там. Вы можете использовать параметр --symlink, чтобы избежать создания реальных копий. - person Cerad; 01.03.2012
comment
Наверное, я немного неправильно описал свою проблему. При наличии app.php или app_dev.php в моем URL-адресе (например, app.php/bundles/mybundle/images/sprite.png) результатом будет 404. При выходе из app.php / app_dev.php (например, пакеты /mybundle/images/sprite.png), путь в порядке, и изображение обслуживается. Assetic обслуживает файлы css через вашу текущую среду. Если вы используете app_dev.php, он также присутствует во всех URL-адресах, сгенерированных активами. Означает, что все относительные пути к изображениям (внутри файлов .css) также используют app_dev.php, что приводит к указанному выше URL-адресу. - person dvcrn; 01.03.2012
comment
В порядке. Я использую стандартный .htaccess, поставляемый в веб-каталоге symfony, поэтому на самом деле у меня нет app_dev.php в моих URL-адресах. Файл .htaccess проверяет, запрашивается ли реальный файл в веб-каталоге перед вызовом php-кода. - person Cerad; 01.03.2012