Рендеринг контента из строки / базы данных и создание ссылок с помощью ветки - PullRequest
4 голосов
/ 21 марта 2012

По нескольким причинам, включая перевод содержимого, мне пришлось создать простую CMS для отображения страниц моего приложения Symfony2.

Моя проблема сейчас заключается в том, что швы невозможно отобразить содержимое из строки.Twig принимает только файлы.Мой контент может содержать динамические части, такие как локаль или аналогичные, поэтому мощность рендеринга ветки будет очень полезна.

Я попытался отрендерить его, используя TwibstringBundle , но его функциональность довольно ограниченаон не работает с функцией пути.

Есть предложения по решению проблемы?

Ответы [ 3 ]

15 голосов
/ 15 октября 2012

см. http://twig.sensiolabs.org/doc/functions/template_from_string.html и http://symfony.com/doc/current/cookbook/templating/twig_extension.html#register-an-extension-as-a-service

{% include template_from_string("Hello {{ name }}") %}
{% include template_from_string(page.template) %}

Поскольку загрузчик строк по умолчанию не загружается, его необходимо добавить в конфигурацию.

# src/Acme/DemoBundle/Resources/config/services.yml
acme.twig.extension.loader:
    class:        Twig_Extension_StringLoader
    tags:
         - { name: 'twig.extension' }

Где Acme / acme - имя вашего приложения, а DemoBundle - пакет, для которого вы хотите включить его.

3 голосов
/ 04 июня 2015

Symfony 2.7 также упрощает это из PHP:

    $twig = $this->get('twig');
    $template = twig_template_from_string($twig, 'Hello, {{ name }}');
    $output = $template->render(['name' => 'Bob']));
1 голос
/ 21 апреля 2016

twig_template_from_string Исходный код функции выглядит следующим образом:

function twig_template_from_string(Twig_Environment $env, $template)
{
    return $env->createTemplate($template);
}

Это означает, что если у вас уже есть twig environment, то лучше позвонить напрямую:

$template = $env->createTemplate($templateString);
$parsedContent = $template->render(array('a'=>'b'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...