#php #twig #silex #pimple
#php #twig #силекс #прыщ
Вопрос:
Я создаю приложение в Silex. Я хочу использовать Twig для рендеринга шаблонов в моем сервисе, который загружается с помощью Pimple. Мне это нужно для класса mailer.
Я начал писать приложение на основе silex-skeleton, поэтому у меня есть среда twig в $app[‘twig’]. Проблема в том, что когда я хочу передать его в службу:
//app.php
$app['someModel'] = function ($app) {
return new someModel($app['twig']);
};
Когда я пишу что-то подобное, twig перестает работать. Все мои подстраницы показывают:
Twig_Error_Loader: Шаблон «(path).html.twig» не определен ().
Я попробовал еще один трюк:
//app.php
$app['someModel'] = function ($app) {
return new someModel($app);
};
//someModel.php
class SomeModel
{
private $twig;
public function __construct($app)
{
$this->twig = $app['twig'];
}
}
но это также нарушает twig. Я пытался присвоить и клонировать $app[‘twig’] другой переменной, тогда это тоже происходит.
//app.php
$variable = $app['twig']
//app.php
$variable = clone $app['twig']
Как я могу использовать Twig в сервисе в Silex?
Ответ №1:
$app->register(new SilexProviderTwigServiceProvider(),
array('twig.path' => __DIR__.'/views',
));
Для получения дополнительной информации загляните в документацию Silex.
Комментарии:
1. Я зарегистрировал поставщика Twig, как здесь , и мой сайт нормально работает. Проблема в том, что twig ломается, когда я пытаюсь поместить его в сервис.
2. Что вы имеете в виду под «разрывами веток»?
3. Когда я помещаю $app [‘twig’] в службу с помощью pimple, тогда все мои подстраницы, которые до этого нормально работали, показывают: Twig_Error_Loader: Template «(path).html.twig» не определен ().
4. Я предполагаю, что у вас есть проблема с внедрением зависимостей, правильный способ выглядит следующим образом:
use SilexApplication; class Sample { protected $app = null; public function __construct(Application $app) { $this->app = $app; } }