У чому різниця між assetic:dumpі в Symfony2 assets:install? У яких сценаріях слід використовувати кожну з цих команд і в якому порядку (якщо порядок є актуальним)?
У чому різниця між assetic:dumpі в Symfony2 assets:install? У яких сценаріях слід використовувати кожну з цих команд і в якому порядку (якщо порядок є актуальним)?
Відповіді:
Я насправді писав про це нещодавно у статті про OroCRM, яка базується на Symfony 2. Якщо ви хочете трохи контексту / чому різні команди, можливо, вам це буде цікаво.
Існує дві різні системи для включення файлів інтерфейсу (javascript, css, зображення тощо) у програму Symfony. assets:installКоманда прийшла першою. Ця команда буде шукати всі пакети Symfony у додатку на наявність
Resources/public
папку. Якщо його буде знайдено, assets:installкоманда скопіює файли або символьні посилання з Resources/publicдо web/public/bundle/[bundle-name]. Тут посилання, створені за допомогою assetsфункції twig, будуть шукати ці файли. Це
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
Це стає
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>
Це все, що assetsробить система. Це дозволяє зберігати файли інтерфейсу разом із набором.
asseticСистема відрізняється. За допомогою asseticви здійснюєте посилання на такі файли.
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Існують подібні теги для таблиць стилів та зображень. Зверніть увагу, що asseticви можете робити посилання на файли в будь-якому наборі. ( @AcmeFooBundle). Assetic також дозволить вам посилатись на декілька файлів у папці з підстановкою.
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Інша відмінність asseticполягає у створених посиланнях. В devоточенні вони будуть виглядати приблизно так.
<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>
Тобто запити на ці файли будуть виконуватися через передній контролер PHP ( app_dev.php) за допомогою спеціальних маршрутів, встановлених у asseticнаборі. Це означає, що коли ви перебуваєте в devрежимі, вам ніколи не потрібно скидати свої активи. Вони включаються автоматично. Це також дозволяє застосовувати фільтри до файлів. Наприклад, наступне застосовує cssrewriteфільтр до втягнутих файлів.
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
Якщо ви коли-небудь хотіли програмно змінити випуск своїх зовнішніх активів - asseticдозволяє це зробити, написавши власні фільтри гілок.
Однак це вимагає високих показників. У виробництві, замість того, щоб пов'язувати кожен файл окремо через файл переднього контролера PHP, згенерований HTML буде виглядати так
<script type="text/javascript" src="/js/as5s31l.js"></script>
Звідки береться as5s31l.js? Ось що assetic:dumpробить команда. Він поєднує всі окремі файли javascript / css (після застосування фільтрів) і створює приємний, статичний файл, який можна кешувати для виробництва.
Якщо проект спеціально не говорить вам інше, ви завжди повинні запускати assets:installі assetic:dump, оскільки ви ніколи не дізнаєтесь, які з ваших сторонніх пакетів використовують ці команди. Вам потрібно запустити лише assetic:dumpперед тим, як розгорнути або переглянути програму в prodрежимі. Порядок не має значення.
Що стосується того, яку систему слід використовувати в наборі - якщо ви прочитали вище і не впевнені, що asseticможете зробити для вас, скористайтеся assets. З тобою все буде добре.
<script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script> , насправді мали на увазі <script type="text/javascript" src="app.php/js/as5s31l.js"></script>