Symfony2: Как правильно включить активы в сочетании с наследованием шаблона Twig?

В настоящее время я разрабатываю веб-приложение с использованием Symfony 2.1.0.

Я прочитал главу о шаблоне книги, и я пытаюсь включить в свои веб-страницы активы (прямо сейчас, это всего лишь одна таблица стилей).

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

  • Приложение / Ресурсы / просмотров /
    • base.html.twig: базовый шаблон, содержащий заголовок , таблицы стилей и блоки тела .
  • SRC / My / PageBundle / Ресурсы / просмотров
    • layout.html.twig: шаблон макета (расширение базового шаблона), добавление основной таблицы стилей в блок таблиц стилей и перезапись блока тела , включая navigation.html.twig и определение блока содержимого
    • layout-admin.html.twig: то же самое, что и выше, но включая navigation-admin.html.twig
    • ЦСИ / My / PageBundle / Ресурсы / просмотров / Главная
      • стандартные шаблоны, расширение шаблона макета и переписывание его блока содержимого
    • ЦСИ / My / PageBundle / Ресурсы / мнение / Администрирование
      • шаблоны администрирования. То же, что и выше, но расширение шаблона макета администрирования.
  • ЦСИ / My / PageBundle / Ресурсы / государственный / KSS
    • main.css: главная таблица стилей

Как вы можете видеть, я поместил таблицу стилей в свой комплект. Я не знаю, является ли это хорошей практикой или нет.

Теперь, в layout.html я добавил следующее:

{% block stylesheets %} {{ parent() }} <link rel="stylesheet" type="text/css" href="{{ asset('css/main.css)' }}" /> {% endblock %} 

Но asset('css/main.css') просто связывается с /css/main.css , тогда как ./app/console assets:install устанавливает активы в web/bundles/mypagebundle/ . Мне не нравится тот факт, что таким образом имя моего пакета будет общедоступным (что может заставить пользователей заподозрить, что я использую Symfony, и мне нравится поддерживать внутренности моей веб-страницы, ну, внутреннюю). Можно ли изменить каталог, в котором assets:install будет устанавливать активы? Мне кажется утомительным, чтобы вручную устанавливать активы в сети /.

Я также думаю об использовании Assetic для управления активами, поскольку мне лично нравится возможность автоматически минимизировать мои сценарии / таблицы стилей и хранить их все вместе в одном файле. Тем не менее, я слышал, что это невозможно, если вы включаете таблицы стилей на разных уровнях, то есть они не будут работать с трехуровневой системой наследования. Можно ли обойти это? Кроме того, будет ли использование Assetic позволять мне скрывать имя моего пакета от общественности?

Solutions Collecting From Web of "Symfony2: Как правильно включить активы в сочетании с наследованием шаблона Twig?"

Использование assetic будет решать все ваши проблемы.

Я слышал, что это невозможно, если вы включаете таблицы стилей на разных уровнях, то есть они не будут работать с трехуровневой системой наследования

Вы можете, но он будет генерировать css-файл для каждого уровня (точно так же, как с активом (), на самом деле).

Пример:

расположение:

 {% block stylesheets %} {{ parent() }} {% stylesheets 'main.css' %} <link rel="stylesheet" type="text/css" href="{{ asset_url }}" /> {% endstylesheets %} {% endblock %} 

суб-шаблон:

 {% block stylesheets %} {{ parent() }} {% stylesheets 'sub.css' %} <link rel="stylesheet" type="text/css" href="{{ asset_url }}" /> {% endstylesheets %} {% endblock %} 

результат:

 <link rel="stylesheet" type="text/css" href="..." /> <link rel="stylesheet" type="text/css" href="..." /> 

В качестве альтернативы подшаблон может полностью переопределить блок таблиц стилей, так что создается только одна таблица стилей (но она менее сухая):

 {% block stylesheets %} {% stylesheets 'main.css' 'sub.css' %} <link rel="stylesheet" type="text/css" href="{{ asset_url }}" /> {% endstylesheets %} {% endblock %} 

результат (в производстве / без отладки):

 <link rel="stylesheet" type="text/css" href="..." />