До Symfony 2.7, управление веб-ресурсами было реализовано в компоненте шаблонов. Дизайн этой подсистемы страдал от некоторых ошибок (требовался request
, потому что она опиралась на экземпляр класса Request) и ограничений (например, для управления списком надежных URL-адресов).
Для того, чтобы решить эти вопросы, Symfony 2.7 вводит новый компонент под названием Asset. Управление веб-ресурсами не отделимо от компонента Templating, что позволяет использовать его вне Symfony (например, в микрофреймворке Silex).
Новый компонент Asset решает задачи генерацией URL и управления версиями веб-ресурсов, таких как CSS стили, файлы JavaScript и файлы изображений. Это означает, что ваши шаблоны становятся более компактными и ваше приложение более гибким, потому что вы можете менять местоположение и версию ваших ресурсов, всего лишь небольшими правками в файле конфигурации.
Изменения конфигурации
Старые assets_*
опции, которые определены в разделе templating
теперь определяются в assets
и их имена теряют префикс assets
. Предыдущие варианты записи в настоящее время считаются устаревними (они исчезнут в Symfony 3.0), но сейчас компонент Asset обновляет их автоматически (можете ничего не менять в конфигурации вашего приложения, если вы не хотите):
# Symfony 2.6
# app/config/config.yml
framework:
templating:
assets_version: 'v5'
assets_version_format: '%%s?version=%%s'
assets_base_urls:
http: ['http://cdn.example.com']
ssl: ['https://secure.example.com']
packages:
# ...
# Symfony 2.7
# app/config/config.yml
framework:
assets:
version: 'v5'
version_format: '%%s?version=%%s'
base_path: ~
base_urls: ['http://cdn.example.com', 'https://secure.example.com']
packages:
# ...
Небольшие изменении претерпела опция base_urls, в которой теперь объединяются обычные (http
) и безопасные (ssl
) URL.
Изменения в шаблонах функций
В Symfony 2.7, в хорошо известной Twig функция assetic () были удалены дополнительные аргументы absolute
и version
:
{# Symfony 2.6 #}
{{ asset('logo.png', absolute = true) }}
{# Symfony 2.7 #}
{{ absolute_url(asset('logo.png')) }}
{# Symfony 2.6 #}
{{ asset('logo.png', version = 'v5') }}
{# Symfony 2.7 (do nothing, version is automatically appended) #}
{{ asset('logo.png') }}
{# use the asset_version() function if you need to output it manually #}
{{ asset_version('logo.png') }}
Примеры использования
Читайте документацию компонента Asset чтобы узнать больше об особенностях этого нового компонента. Вы узнаете, как реализовать такие трюки, как например:
Определить ярлыки для бандла ресурсов
# app/config/config.yml
framework:
assets:
packages:
app:
base_path: /bundles/app/
img:
base_path: /bundles/app/images/
{{ asset('images/me.png', 'app') }}
{# /bundles/app/images/me.png #}
{{ asset('me.png', 'img') }}
{# /bundles/app/images/me.png #}
Расширенное версионирование ресурсов
# app/config/config.yml
framework:
assets:
version: 'v5'
version_format: '%%s?version=%%s'
packages:
avatar:
base_path: /img/avatars
doc:
base_path: /docs/pdf
version_format: '%2$s/%1$s'
{{ asset(user.uuid ~ '.png', 'avatar') }}
{# /img/avatars/1b0ae6a5-1c39-4b49-bcc1-2a787c8ec139.png?version=v5 #}
{{ asset('contracts/signup.pdf', 'doc') }}
{# /v5/docs/pdf/contracts/signup.pdf #}
Контекстно-зависимые CDNs
# app/config/config.yml
framework:
assets:
base_urls:
- 'http://static1.example.com/images/'
- 'https://static2.example.com/images/'
{{ asset('logo.png') }}
{# in a regular page: http://static1.example.com/images/logo.png #}
{# in a secure page: https://static2.example.com/images/logo.png #}
Источник: http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component