При попытке интегрировать Twig в Symfony, возникли следующие проблемы: информации практически нет, нет гайда по интеграции, есть мини документация по Twig, которая описывает как работать с Twig, но не как научить его работать с Symfony. Пришлось немного поискать и поспрашивать в google groups.
Надеюсь, кому-то этот материал будет полезен.
Скачиваем sfTwigPlugin (здесь есть расширения, которые «импортируют» хелперы Symfony в Twig, есть класс представления, переопределяющий sfPHPView).
Следуем инструкции, описанной здесь.
Помещаем плагин в директорию /lib/vendor/symfony/lib/plugins/sfTwigPlugin/.
Подключаем его в ProjectConfiguration.class.php:
Сохраняем плагин с twig-project.org в директорию /lib/vendor/Twig.
В директории /config создаем файл module.yml и определяем класс Представления, который будет отвечать за вывод страниц-шаблонов Twig:
Действие, которое будет выводить шаблон выглядит примерно так:
Здесь приведен самодостаточный пример действия, но в дальнейшем нужно будет вынести инклуды хелперов и переопределение тегов шаблона.
В директории /apps/<project_name>/modules/<module_name>/templates создаем:
layout.php
indexSuccess.html
Теперь должны работать хелперы Symfony как фильтры Twig.
Пока не получилось заставить работать некоторые хелперы AssetHelper, например:
работают только вместе, если пытаться подгружать стили, указанные в конфиге view.yml
теги на странице не появятся.
P.S. Тема Symfony и Twig для меня нова, поэтому, если у кого-то есть ценные советы, буду рада их выслушать. Если интересно продолжение истории, напишу еще статью по ходу выполнения новых задач.
Надеюсь, кому-то этот материал будет полезен.
Скачиваем 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 для меня нова, поэтому, если у кого-то есть ценные советы, буду рада их выслушать. Если интересно продолжение истории, напишу еще статью по ходу выполнения новых задач.