Использование 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