Настройка выходного каталога для Assetic в Symfony2
Я бы хотел, чтобы глобальная конфигурация выходного каталога, где ametic дампы мои JS файлы. В настоящее время они всегда идут в web/js/*
. Я хочу изменить это на web/js/compiled/*
.
Можно указать это на уровне каждого файла: http://symfony.com/doc/2.0/cookbook/assetic/asset_management.html#dumping-asset-files
Невозможно найти способ установить это глобально через мое приложение Symfony. Любой параметр конфигурации, который мне не хватает?
UPDATE
Обнаружен параметр конфигурации aссоциированной конфигурации write_to
. Установка этого параметра в config.yml
заставляет командную строку assetic:dump
выгружать файлы в новый каталог, но в файлах twig asset_url
var все еще указывает на исходный путь.
Ответы
Ответ 1
Вы должны использовать свойство write_to.
в моей конфигурации, например, я использую
# Assetic Configuration
assetic:
debug: %kernel.debug%
use_controller: %kernel.debug%
read_from: %kernel.root_dir%/Resources/views/
write_to: %kernel.root_dir%/../web/static/
В начало строки вы начинаете, где заканчивается write_to
для примера
{% javascripts filter="closure" output='js/main.js'
...
{% stylesheets filter='compass,?cssrewrite'
'default/static/sass/screen.scss'
output='css/screen.css'
%}
оба будут помещаться соответственно в /web/static/js/main.js
и /web/static/css/screen.css
assets_base_urls используется для указания базового URL-адреса, который будет использоваться для активов, на которые ссылаются http и ssl (https) страницы.
!! assets_base_urls
также используется {% images %}
как корень перед значением output
, но {% images %}
не рассматривает write_to
при рендеринге html (только при сбрасывании) поэтому лучше не использовать write_to
и полагаться только на значение output
. Подробнее об этом в fooobar.com/questions/371898/... и в этот пост в AsseticBundle github.
Ответ 2
Вы можете установить путь ресурса (assets_base_urls
) для ветки к статическому пути вместо использования относительного пути. В вашем файле config.yml он будет выглядеть примерно так:
framework:
templating:
engines: ['twig']
assets_base_urls:
http: [http://path.to-cdn.com]
Это приведет к эффекту asset_url
от метода асептики, а также метода twig asset()
. Последнее может быть или не быть желательным.
Ответ 3
Этот комментарий к проблеме GitHub помог мне с этой проблемой.
В то время как в dev ваши активы по-прежнему будут поступать через контроллер, но в производстве, URL-адреса будут такими, какие вы хотите.
Пример config.yml:
assetic:
write-to: %kernel.root_dir%/../web/assets
...
framework:
...
templating:
engines: ['twig']
packages:
assetic:
base_urls: '/assets'
Пример в шаблоне:
{% block javascripts %}
{% javascripts '@jquery' '@bootstrap_js' '@backbone' '@handlebars' combine=true package='assetic' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock %}
Обратите внимание, что вам нужно добавить атрибут package = 'assetic' в тег java-скриптов. Это хорошая компромиссная ИМО, потому что она не будет разрушать активы из других пакетов, поскольку решение kmfk будет.
Ответ 4
Просто короткую заметку об этом. Если вы используете assets_base_urls
, чтобы указать относительный базовый URL-адрес, это работает только до Symfony 2.7 из-за внедрения нового компонента активов в этой версии. Дополнительная информация о том, как изменить это, доступна в http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component, но длинная и короткая:
framework:
templating:
assets_base_urls:
http: ['/some-relative-url']
ssl: ['/some-relative-url']
становится:
framework:
assets:
base_path: /some-relative-url
Ответ 5
Попробуйте эту команду $ app/console --env=prod assetic:dump web/
у вас есть juste, чтобы изменить URL-адрес, который вы хотите использовать, чем "web/"