Twig визуализирует шаблон внутри шаблона - PullRequest
2 голосов
/ 29 февраля 2012

Я хотел бы знать, как отобразить «шаблон внутри другого шаблона». У меня есть такой шаблон:

[...]
{% autoescape false %}
    {{ page.content }}
{% endautoescape %}
[...]

"page.content" можно оценить с помощью некоторой веточки! Например, он может содержать некоторые вызовы, такие как

{{ myObject.poperty }}

или даже

{% render "MyBundle:Bundle:myAction" with {'title': myObject.title} %}

По умолчанию содержимое page.content не анализируется Twig. Итак, я сделал расширение, и я могу анализировать звонки, как {{page.content}}

Мое расширение выглядит так:

$loader     = new \Twig_Loader_String();
$this->environment->setLoader($loader);

$template   = $this->environment->loadTemplate($string);
$output     = $template->display(array('myObject' => $object));

Но я все еще не могу воспроизвести второй тип вызова {% render ....%}

Я пытался сделать:

$stream     = $this->environment->tokenize($string);
$nodes      = $this->environment->parse($stream)->getNode('body')->getNode(0);
$output     = $this->environment->compile($nodes);

Но я застрял ...

Знаете ли вы, как я могу отобразить значение "page.content"?

1 Ответ

1 голос
/ 06 марта 2012

Итак, я создал расширение php twig, и одно из решений выглядит так:

public function parsingTwig($source, $context)
    {
        $stream     = $this->env->tokenize($source);
        $iterator   = $this->env->parse($stream)->getNode('body')->getIterator();

        while ($iterator->valid())
        {
            $current = $iterator->current();
            $output  = $this->env->compile($current);
            eval($output);
            $iterator->next();
        }
}

Вам необходимо определить некоторые функции, такие как 'getAttribute' или 'getContext'. Эти функции можно найти в классе шаблонов twi ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...