Настройка выходного каталога для 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/"