Использование assetic в Symfony framework
Несколько заметок назад я рассмотрел работу с assets в Symfony framework. Этот пример показывает, как работать со своими ассетами. Но на практике часто приходится использовать внешние ассеты.
Для таких, и не только таких задач подходит assetic. Достаточно сложно в двух словах описать, что это такое. Но для себя я представляю assetic как менеджер ассетов.
Иногда обойтись без него просто невозможно. Например, если мы подключим что-либо внешним бандлом, например, twitter bootstrap (twbs/bootstrap в композере). Все содержимое лежит в недоступном извне месте (как вы, наверное, знаете, из соображений безопасности все, кроме папки web (или ее аналога) закрыто для доступа извне).
В таком случае assetic позволяет перебросить необходимые файлы в доступное извне место.
Для этого нужно сконфигурировать assetic:
app//config/config.yml:
# Assetic Configuration
assetic:
debug: %kernel.debug%
use_controller: false
bundles: [ HarentiusSiteBundle ] filters:
cssrewrite: ~
#closure:
# jar: %kernel.root_dir%/Resources/java/compiler.jar
#yui_css:
# jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar
assets:
bootstrap_min_css:
inputs:
- %kernel.root_dir%/../vendor/twbs/bootstrap/dist/css/bootstrap.min.css
filters:
- cssrewrite
output: css/bootstrap.min.css
jquery_min_js:
inputs:
- %kernel.root_dir%/../vendor/components/jquery/jquery.min.js
output: js/jquery.min.js
bootstrap_min_js:
inputs:
- %kernel.root_dir%/../vendor/twbs/bootstrap/dist/js/bootstrap.min.js
output: js/bootstrap.min.js
Видим, что надо указать бандл для ассетов (секция bundles).Потом переходим к конфигурации ассетов: необходимо указать ссылку на ассет, под которым он будет доступным из, например, представлений, входящие файлы (которые, например, в недоступном извне месте) и исходящие (в доступном месте). Также можно применять различные фильтры.
После таких действий в представлении можно использовать ссылки:
{% stylesheets 'css/bootstrap.min.css' %}
<link rel="stylesheet" href="{{ asset(asset_url) }}"/>
{% endstylesheets %}
Чтобы это все работало на продакш сборке, нужно вызывать
php app/console assetic:dump