Настроить выходной каталог для Assetic в Symfony2 - PullRequest
14 голосов
/ 23 февраля 2012

Я бы хотел глобально настроить выходной каталог, в который сборка выводит мои JS-файлы. В настоящее время они всегда идут к web/js/*. Я хочу изменить это на web/js/compiled/*.

Можно указать это на уровне файлов: http://symfony.com/doc/2.0/cookbook/assetic/asset_management.html#dumping-asset-files

Не могу найти способ установить это глобально в моем приложении Symfony. Какой-либо параметр конфигурации, который мне не хватает?

UPDATE

Найден параметр конфигурации сборки под названием write_to. Установка этого значения в config.yml заставляет командную строку assetic:dump выводить файлы в новый каталог, но в файлах веток asset_url var все еще указывает на исходный путь.

Ответы [ 5 ]

17 голосов
/ 02 мая 2012

Вы должны использовать свойство 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. Подробнее об этом в моем другом посте о stackoverflow и в этом посте на github AsseticBundle .

4 голосов
/ 12 апреля 2012

Вы можете установить путь ресурса (assets_base_urls) для ветки в статический путь вместо использования относительного пути.В вашем файле config.yml это будет выглядеть примерно так:

framework:
   templating:
      engines: ['twig']
         assets_base_urls:
            http: [http://path.to-cdn.com]

Это повлияет на asset_url как от метода сборки, так и от метода asset().Последнее может или не может быть желательным.

2 голосов
/ 27 января 2016

Просто краткая заметка об этом.Если вы используете 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
2 голосов
/ 05 сентября 2013

Этот комментарий к проблеме 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 = 'assembly' в javaтег скриптов.Это хороший компромисс для IMO, потому что он не отделит активы от других пакетов, как решение kmfk.

0 голосов
/ 29 июля 2013

Попробуйте этот комманд $ app/console --env=prod assetic:dump web/ у вас есть основания изменить URL, который вы хотите, чаще, чем 'web /'

...