#php #ооп #mvc #twig
У меня небольшой проект (mvc,OOP). Покажите пожалуйста как правильно подключать Twig и как его использовать в controller
Ответы
Ответ 1
Существует множество способов установки Twig-a. Самый простой и быстрый - это скачивание компонента с GitHub, после чего архив необходимо распаковать, и перекинуть каталог lib в папку с нашим проектом. Ну а теперь давайте приступим к делу и рассмотрим структуру нашего небольшого проекта: compilation_cache lib Twig templates base.html books.html index.php Весь функционал, связанный с подключением и настройкой Twig-а, содержится в файле index.php. В папке templates мы будем хранить файлы шаблонов. В нашем случае, этих файлов 2: base.html с базовым html кодом и books.html с выводом списка книг. В каталоге compilation_cache будут помещаться PHP файлы, созданные Twig-ом для работы. Итак, первое что нам необходимо сделать, так это подключить Twig: require_once 'lib/Twig/Autoloader.php'; Twig_Autoloader::register(); После этого сообщаем шаблонизатору, где у нас хранятся файлы шаблонов. В качестве аргумента передаём путь к каталогу templates: $loader = new Twig_Loader_Filesystem('templates'); Затем создаём объект шаблонизатора и указываем ещё несколько опций: $twig = new Twig_Environment($loader, array( 'cache' => 'compilation_cache', 'auto_reload' => true )); Параметру cache передаём путь к каталогу compilation_cache. Активируем опцию auto_reload, для того чтобы при обновлении страницы Twig заново обрабатывал шаблоны, и мы видели изменения. Если этого не сделать, то шаблонизатор просто закэширует страницы. Когда же работа над проектом будет завершена, эту опцию можно убрать, чтобы ваши страницы закэшировались и грузились ещё быстрее. Для реализации нашего небольшого примера, возьмём список книг и сформируем массив вида ключ - значение: $books = array( array('number' => 'Книга 1', 'title' => 'Гарри Поттер и философский камень', 'date' => '30.06.1997'), array('number' => 'Книга 2', 'title' => 'Гарри Поттер и Тайная комната', 'date' => '2.07.1998'), array('number' => 'Книга 3', 'title' => 'Гарри Поттер и узник Азкабана', 'date' => '8.07.1999'), array('number' => 'Книга 4', 'title' => 'Гарри Поттер и Кубок огня', 'date' => '8.07.2000'), array('number' => 'Книга 5', 'title' => 'Гарри Поттер и Орден Феникса', 'date' => '21.07.2003'), array('number' => 'Книга 6', 'title' => 'Гарри Поттер и Принц-полукровка', 'date' => '16.07.2005'), array('number' => 'Книга 7', 'title' => 'Гарри Поттер и Дары Смерти', 'date' => '21.07.2007') ); Для того чтобы передать данные в какой-то шаблон и вывести html результат, нам необходимо воспользоваться методом render(); В качестве первого аргумента передаём название файла шаблона, который будем выводить. В качестве второго -массив вида ключ - значение. В дальнейшем по заданным ключам мы будем получать доступ к нашим данным в самих шаблонах. echo $twig->render('books.html', array('books' => $books)); Общий вид файла index.php require_once 'lib/Twig/Autoloader.php'; Twig_Autoloader::register(); $loader = new Twig_Loader_Filesystem('templates'); $twig = new Twig_Environment($loader, array( 'cache' => 'compilation_cache', 'auto_reload' => true )); $books = array( array('number' => 'Книга 1', 'title' => 'Гарри Поттер и философский камень', 'date' => '30.06.1997'), array('number' => 'Книга 2', 'title' => 'Гарри Поттер и Тайная комната', 'date' => '2.07.1998'), array('number' => 'Книга 3', 'title' => 'Гарри Поттер и узник Азкабана', 'date' => '8.07.1999'), array('number' => 'Книга 4', 'title' => 'Гарри Поттер и Кубок огня', 'date' => '8.07.2000'), array('number' => 'Книга 5', 'title' => 'Гарри Поттер и Орден Феникса', 'date' => '21.07.2003'), array('number' => 'Книга 6', 'title' => 'Гарри Поттер и Принц-полукровка', 'date' => '16.07.2005'), array('number' => 'Книга 7', 'title' => 'Гарри Поттер и Дары Смерти', 'date' => '21.07.2007') ); echo $twig->render('books.html', array('books' => $books)); Настройка базового шаблона. Базовый шаблон представляет собой обычный html документ со специальными вставками:{% block title %}{% endblock %} {% block content %} {% endblock %}В нашем главном шаблоне мы прописываем 2 блока: title и content. Названия блоков выбираем сами. В последствии, в эти общие блоки мы будем внедрять характерную для дочерних страниц информацию. Настройка шаблона вывода книг Для начала в дочернем шаблоне нам необходимо указать шаблон родителя: {% extends "base.html" %} Далее в блок title запишем название дочерней страницы, которая обработается Twig-ом и вставится между тегами title в базовом шаблоне: {% block title %}Серия романов о Гарри Поттере{% endblock %} Затем, пишем содержание, которое внедрится в блок под названием content в базовом шаблоне: {% block content %}Серия романов о Гарри Поттере
{% for book in books %}{% endblock %} Тут же в цикле for (Twig for) мы проходимся по всем книгам, которые передали в данный шаблон с помощью записи $twig->render('books.html', array('books' => $books)); и для извлечения значений обращаемся к элементам массива по ключам: {{book.number}}, {{book.title}} и так далее. Таким образом, после срабатывания метода $twig->render('books.html', array('books' => $books)), Twig подгрузит шаблон books.html и сформирует html содержание. Далее он распознает, что books.html - это дочерний шаблон base.html, и поместит сформированное содержание в базовый шаблон. После всего этого Twig вернёт нам полноценную html страницу.{{book.number}}. "{{book.title}}" - {{book.date}}{% endfor %}
Комментариев нет:
Отправить комментарий