Symfony2: Как разделить библиотеки js и css между пакетами

У меня разные пакеты: MainBundle (домашняя страница), SecurityBundle (логин, регистрация), MessageBundle (система сообщений), ShopBundle.

Я также следую трехэтапной схеме компоновки (::base.html.twig, AcmeMainBundle::layout.html.twig, AcmeMainBundle:Default:index.html.twig).

Но у меня есть проблемы с обменом общими библиотеками js через приложение (например, jquery) и определением base.css (который устанавливает некоторые базовые классы, фоны, шрифты и т. д.)

Итак, каков наилучший подход к использованию общих css и js без потери поддержки активов?

Одной из идей было бы создать CommonBundle, который содержит все глобальные js и css и некоторые файлы макета, но я не думаю, что это лучший способ справиться с этим...


person bodokaiser    schedule 25.06.2012    source источник


Ответы (2)


Если вы хотите использовать общие ресурсы для всех ваших пакетов, лучше всего поместить их в каталог app/Resources/public. Например:

app/Resources/Public
|-- css
|   `-- base.css
|-- js
|   `-- jquery.js

Затем вы можете ссылаться на них в своем макете следующим образом:

{% block stylesheets %}
  {% stylesheets '../app/Resources/public/css/*' %}
    <link rel="stylesheet" type="text/css" charset="UTF-8" media="all" href="{{ asset_url }}"/>
  {% endstylesheets %}
{% endblock %}

{% block javascripts %}
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
  {% javascripts '../app/Resources/public/js/*' %}
    <script type="text/javascript" src="{{ asset_url }}"></script>
  {% endjavascripts %}
{% endblock %}

Примечание. Как видите, для распространенных библиотек, таких как jQuery, лучшим выбором остается использование общей кэшированной версии, размещенной в Google. Такая практика может ускорить время отклика вашего приложения.

person fsenart    schedule 25.06.2012
comment
Я нашел еще лучший способ сделать это: вы можете определить собственные библиотеки в разделе активов config.yml, который содержит ваши библиотеки с зависимостями. Их можно легко загрузить с помощью ярлыка. См. здесь для деталей: я определяю интерфейсные библиотеки"> stackoverflow.com/questions/10830129/ - person bodokaiser; 25.06.2012
comment
Это все о школе, которой вы хотите следовать. Найденное вами решение скрывает детали пути к ресурсу в config.yml, а решение, которое я предлагаю, встраивает такие детали непосредственно в шаблон Twig. - person fsenart; 25.06.2012
comment
Конечно! Я все еще немного зависаю, делая фоновое изображение в app/Resources/public/img доступным в файле css. Я использовал переписывание css, но, похоже, активик не знает, что вы можете хранить изображения в базовом каталоге. - person bodokaiser; 25.06.2012
comment
Попробовав способы (использование веб-каталога, способ, предложенный здесь, и создание пакета дизайна), я думаю, что создание пакета дизайна - лучший ответ. - person Mohammad Ali Akbari; 05.12.2012

Используя последнюю версию Symfony (2.5), я увидел, что ответ fsenart не работает в моем случае. Вместо этого я помещаю общую папку с общим содержимым в веб-папку:

web/public
  --js
  --css

Затем, чтобы использовать его в основном макете, работает следующий код:

{% block javascripts %}
    {% javascripts 'public/js/*' %}
        <script type="text/javascript" src="{{ asset_url }}"></script>
    {% endjavascripts %}
{% endblock %}

Но для этого нужно не забыть вызвать функцию Twig parent() при использовании блока javascript в дочернем макете.

person websoft102030    schedule 25.02.2015