Silex, используя Twig в службе

#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; } }