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

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

Чулан
При попытке интегрировать 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 для меня нова, поэтому, если у кого-то есть ценные советы, буду рада их выслушать. Если интересно продолжение истории, напишу еще статью по ходу выполнения новых задач.
Теги:symfonytwigphpшаблонизаторplugin
Хабы: Чулан
Всего голосов 11: ↑6 и ↓5 +1
Просмотры603

Похожие публикации

Senior PHP Developer (Symfony)
от 3 000 $RELAYTO/Можно удаленно
PHP Symfony разработчик
от 100 000 до 150 000 ₽DAMIR.INМожно удаленно
Backend разработчик (PHP Symfony)
от 130 000 ₽СберЛогистикаМоскваМожно удаленно
PHP developer (Symfony)
до 250 000 ₽SibedgeМоскваМожно удаленно
Senior PHP разработчик (Symfony) Рига
от 2 500 до 4 000 €Digital LineРигаМожно удаленно

Лучшие публикации за сутки