У меня проблемы с добавлением расширений Twig.
У меня есть контроллеры Bundle, расширяющие пользовательский класс BaseController:
class DefaultController extends BaseController
И вот мой класс BaseController (только его часть).
class BaseController extends Controller {
public function setContainer(\Symfony\Component\DependencyInjection\ContainerInterface $container = null)
{
parent::setContainer($container);
$this->onContainerSet();
}
public function onContainerSet()
{
// many other tasks
$this->get('twig')->addExtension(new \Twig_Extension_StringLoader());
$this->get('twig.loader')->addPath('../app');
$function = new \Twig_SimpleFunction('stars', function ($number, $maximum_stars = 5) {
$this->get('twig')->addGlobal('star_number',sprintf("%.1f",$number));
$this->get('twig')->addGlobal('star_max',$maximum_stars);
$full_stars = floor($number);
$half_stars = ($number - $full_stars) * 2;
$empty_stars = $maximum_stars - $full_stars - $half_stars;
$this->get('twig')->addGlobal('full_stars_number',$full_stars);
$this->get('twig')->addGlobal('half_stars_number',$half_stars);
$this->get('twig')->addGlobal('empty_stars_number',$empty_stars);
echo $this->renderView(
'views/stars.html.twig'
);;
});
$function2 = new \Twig_SimpleFunction('inurl', function ($anchor, $code) {
echo '<a href="'.$this->internalLinks[$code].'">'.$anchor."</a>";
});
$this->get('twig')->addFunction($function);
$this->get('twig')->addFunction($function2);
}
}
Эта проблема:
Когда я очищаю каталог кеша, у меня есть первое сообщение:
КРИТИЧЕСКОЕ — необработанное исключение PHP LogicException: «Невозможно зарегистрировать расширение «string_loader», поскольку расширения уже инициализированы». at ...\vendor\twig\twig\lib\Twig\Environment.php строка 660 Контекст: {"Exception":"Object(LogicException)"}
Но когда я перезагружаю страницу (папка кеша уже создана), она работает нормально (без исключений).
Однако, если я прокомментирую строку:
// $this->get('twig')->addExtension(new \Twig_Extension_StringLoader());
и очистить каталог кеша. У меня есть исключение:
КРИТИЧЕСКОЕ - Uncaught PHP Exception LogicException: «Невозможно добавить функцию «звездочки», так как расширения уже инициализированы». at ...\vendor\twig\twig\lib\Twig\Environment.php строка 946 Контекст: {"Exception":"Object(LogicException)"}
Таким образом, кажется, что когда каталог кеша по какой-то причине не существует, добавление каких-либо расширений Twig не работает (расширения уже были инициализированы), как мне бы хотелось, но когда каталог кеша уже создан, все работает нормально.
Вопрос - как его решить самым простым способом?