2012-02-23 2 views
14

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

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

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

ОБНОВЛЕНИЕ

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

+0

вы когда-нибудь придумать решение? Я бы предположил, что опция 'read_from' в конфигурации будет тем, что мы ищем. Тем не менее, я не могу воспользоваться этой возможностью. Независимо от того, для чего я установил параметр read_from, мое приложение использует путь по умолчанию. – kmfk

+0

@kmfk Пока ничего. Прямо сейчас мы просто устанавливаем параметр 'output' для каждого блока' javascripts', но это совсем не идеально. – anushr

+0

Да, у меня есть запасы моих активов прямо на наш ведро S3, и я хотел, чтобы среда prod читала файлы оттуда - в то время как среда dev выгружается в локальную папку и, по-видимому, мои шаблоны должны читать из этой папки, пока dev. Я закончил проверку среды в контроллере и передал var в шаблон для префикса 'asset_url' для cdn. Не идеально, но он выполняет свою работу. – kmfk

ответ

4

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

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

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

16

Вы должны использовать недвижимость write_to.

в моей конфигурации для Exemple Я использую

# Assetic Configuration 
assetic: 
    debug:   %kernel.debug% 
    use_controller: %kernel.debug% 
    read_from:  %kernel.root_dir%/Resources/views/ 
    write_to:  %kernel.root_dir%/../web/static/ 

Ваш Ouput строка запуска, где заканчивается write_to

для Exemple

{% 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 значение. Подробнее об этом в my other post on stackoverflow и в this post on AsseticBundle's github.

+0

Такой сложный Symfony :) – userlond

-4

Попробуйте Commande $ app/console --env=prod assetic:dump web/ у вас есть Жюст изменить URL вы хотите raher, чем «веб /»

2

This GitHub issue comment помог мне с этим вопросом. В то время как в 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 %} 

Обратите внимание, что вы должны добавить пакет = 'assetic' атрибут в теге Java скриптов. Это хорошая компромиссная ИМО, потому что она не будет разрушать активы из других пакетов, как это сделает решение kmfk.

2

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