Я пишу (Symfony2) SmartyBundle расширение для поддержки Assetic .
Для поддержки функции таблиц стилей Я зарегистрировал блочный плагин с именем stylesheets
:
{stylesheets
assets='@SmartyBundle/Resources/public/css/*'
debug=true}
<a href="{$asset_url}">{$asset_url}</a>
{/stylesheets}
Этот плагин вызывается правильно, и все работает, как и ожидалось, когда создается Symfony / сборочный кеш.
Проблема возникает, когда кэш Symfony пуст, и Assetic загружает каждый ресурс файла шаблона и просит механизм шаблонов получить массив PHP с токенами, найденными в теге stylesheets. Класс, вызываемый для извлечения массива: SmartyFormulaLoader
.
<?php
class SmartyFormulaLoader implements \Assetic\Factory\Loader\FormulaLoaderInterface
{
public function load(ResourceInterface $resource)
{
// raw template content
$content = $resource->getContent();
// a FileLoaderImportCircularReferenceException is throw here
$smartyParsed = $this->smarty->fetch('string: '.$content);
// build an array with tokens extracted from the block function
$formulae = $this->extractStylesheetsTokens($smartyParsed);
return $formulae;
}
Когда в методе load()
вызывается $smarty->fetch()
, генерируется исключение: Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException: Circular reference detected in "." ("." > ".")
.
Это вызвано тем, что шаблон Smarty анализируется / компилируется и снова вызывается плагин stylesheets
.
Поэтому я спрашиваю, предоставляет ли Smarty синтаксический анализатор шаблонов, который извлекает токены блочной функции (без вызова плагина таблиц стилей), чтобы я мог кормить Assetic. Или любое другое решение, которое я могу упустить, чтобы решить эту проблему.
Спасибо.