Я пишу (Symfony2) расширение SmartyBundle для поддержки Assetic.
Для поддержки функции таблиц стилей я зарегистрировал блочный плагин под названием stylesheets
:
{stylesheets
assets='@SmartyBundle/Resources/public/css/*'
debug=true}
<a href="{$asset_url}">{$asset_url}</a>
{/stylesheets}
Этот плагин вызывается правильно, и все работает, как и ожидалось, когда создается кеш Symfony/assetic.
Проблема возникает, когда кеш Symfony пуст, а Assetic загружает каждый ресурс файла шаблона и запрашивает механизм шаблонов для извлечения массива PHP с токенами, найденными в теге таблиц стилей. Класс, вызываемый для извлечения массива, — 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;
}
Когда $smarty->fetch()
вызывается в методе load()
, возникает исключение: Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException: Circular reference detected in "." ("." > ".")
.
Это вызвано анализом/компиляцией шаблона Smarty и повторным вызовом плагина stylesheets
.
Поэтому я спрашиваю, предоставляет ли Smarty анализатор шаблонов, который извлекает токены функций блока (без вызова плагина таблиц стилей), чтобы я мог скормить Assetic. Или любое другое решение, которое мне может не хватать, чтобы решить эту проблему.
Спасибо.