Пиша разширение (Symfony2) SmartyBundle за поддръжка на Assetic.
За да поддържам функцията стилови таблици, регистрирах блокова добавка, наречена stylesheets
:
{stylesheets
assets='@SmartyBundle/Resources/public/css/*'
debug=true}
<a href="/bg{$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. Или всяко друго решение, което може да ми липсва, за да реша това.
Благодаря.