Как стать автором
Обновить

Интеграция шаблонизатора Twig в Symfony 1.4

Время на прочтение5 мин
Количество просмотров1.4K
При попытке интегрировать Twig в Symfony, возникли следующие проблемы: информации практически нет, нет гайда по интеграции, есть мини документация по Twig, которая описывает как работать с Twig, но не как научить его работать с Symfony. Пришлось немного поискать и поспрашивать в google groups.

Надеюсь, кому-то этот материал будет полезен.


Скачиваем sfTwigPlugin (здесь есть расширения, которые «импортируют» хелперы Symfony в Twig, есть класс представления, переопределяющий sfPHPView).

Следуем инструкции, описанной здесь.

Помещаем плагин в директорию /lib/vendor/symfony/lib/plugins/sfTwigPlugin/.

Подключаем его в ProjectConfiguration.class.php:

$this->enablePlugins('sfDoctrinePlugin', 'sfTwigPlugin');<br><br>* This source code was highlighted with Source Code Highlighter.


Сохраняем плагин с twig-project.org в директорию /lib/vendor/Twig.

В директории /config создаем файл module.yml и определяем класс Представления, который будет отвечать за вывод страниц-шаблонов Twig:

all:<br> view_class: sfTwig<br> partial_view_class: sfTwig<br><br>* This source code was highlighted with Source Code Highlighter.


Действие, которое будет выводить шаблон выглядит примерно так:

function executeIndex() {<br>  // подгружаем хелперы Symfony<br>  require_once 'path_to_symfony_project/lib/vendor/symfony/lib/helper/AssetHelper.php';<br>  require_once 'path_to_symfony_project /lib/vendor/symfony/lib/helper/TagHelper.php';<br>     <br>  $loader = new Twig_Loader_Filesystem('/var/www/symfony-test/html/apps/blahg/modules/posts/templates');<br>    <br>  $twig = new Twig_Environment($loader, array('cache' => false));<br>    <br>  // переопределение делимитеров шаблонизатора<br>  $lexer = new Twig_Lexer($twig, array(<br>    'tag_comment' => array('/*', '*/'),<br>    'tag_block'  => array('[', ']'),<br>    'tag_variable' => array('{', '}'),<br>  ));<br>  $twig->setLexer($lexer);<br>    <br>  // регистрация нужного расширения для использования хелперов Symfony<br>  $twig->addExtension(new Asset_Twig_Extension());<br>  $twig->addExtension(new Tag_Twig_Extension());<br>        <br>  // подготовка данных для вывода<br>  $this->postss = Doctrine::getTable('Posts')<br>    ->createQuery('a')<br>    ->leftJoin('a.Comments c')<br>    ->execute();<br>      <br>  // загрузка шаблона <br>  $template = $twig->loadTemplate('indexSuccess.html');<br>    <br>  // инициализация контента HTTP ответа <br>  $this->getResponse()->setContent($template->render(array('postss' => $this->postss->getData())));<br>    <br>  // обходим дефолтовое представление<br>  return sfView::NONE;<br>}<br><br>* This source code was highlighted with Source Code Highlighter.


Здесь приведен самодостаточный пример действия, но в дальнейшем нужно будет вынести инклуды хелперов и переопределение тегов шаблона.

В директории /apps/<project_name>/modules/<module_name>/templates создаем:

layout.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><br>  <head><br>    { 'main'|use_stylesheet('first') }<br>    { ''|include_stylesheets }<br>  </head><br>  <body><br>    [ block content ][ endblock ]<br>  </body><br></html><br><br>* This source code was highlighted with Source Code Highlighter.


indexSuccess.html

[ extends "layout.html" ]<br><br>[ block content ]<br><br><h1>Postss List</h1><br><table class="posts-list"><br>  <thead><br>    <tr><br>      <th>Id</th><br>      <th>Title</th><br>      <th>Text</th><br>      <th>Modified</th><br>      <th>Comments count</th><br>    </tr><br>  </thead><br>  <tbody><br>    [ for posts in postss ]<br>      <tr><br>        <td>{ posts.id }</td><br>       <td><a href="">{ posts.title }</a></td><br>       <td>{ posts.text }</td><br>       <td>{ posts.modified_ }</td><br>       <td>{ posts.Comments.count }</td><br>      </tr><br>    [ endfor ]<br>  </tbody><br></table><br><br>[ endblock ]<br><br>* This source code was highlighted with Source Code Highlighter.


Теперь должны работать хелперы Symfony как фильтры Twig.

Пока не получилось заставить работать некоторые хелперы AssetHelper, например:
{ 'main'|use_stylesheet('first') }
{ ''|include_stylesheets }

работают только вместе, если пытаться подгружать стили, указанные в конфиге view.yml
{ ''|include_stylesheets }
теги на странице не появятся.

P.S. Тема Symfony и Twig для меня нова, поэтому, если у кого-то есть ценные советы, буду рада их выслушать. Если интересно продолжение истории, напишу еще статью по ходу выполнения новых задач.
Теги:
Хабы:
+1
Комментарии8

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн