Уровень представления — это уровень представления приложения MVC. Он отделяет логику приложения от логики представления.
Когда контроллеру необходимо сгенерировать HTML, CSS или любой другой контент, он направляет задачу в механизм шаблонов.
Шаблоны
Шаблоны — это, в основном, текстовые файлы, используемые для создания любых текстовых документов, таких как HTML, XML и т. Д. Он используется для экономии времени и уменьшения количества ошибок.
По умолчанию шаблоны могут находиться в двух разных местах:
app / Resources / views / — Каталог представлений приложения может содержать макеты и шаблоны вашего приложения. Он также переопределяет сторонние шаблоны пакетов.
vendor / path / to / Bundle / Resources / views / — Каждый сторонний пакет содержит свои шаблоны в своем каталоге «Resources / views /».
Twig Engine
Symfony использует мощный язык шаблонов, который называется Twig . Twig позволяет очень легко создавать краткие и удобочитаемые шаблоны. Шаблоны Twig просты и не будут обрабатывать теги PHP. Twig выполняет управление пробелами, изолированную среду и автоматическое экранирование HTML.
Синтаксис
Twig содержит три типа специального синтаксиса —
-
{{…}} — печатает переменную или результат выражения в шаблон.
-
{% …%} — тег, который управляет логикой шаблона. Он в основном используется для выполнения функции.
-
{# … #} — Синтаксис комментариев. Используется для добавления однострочных или многострочных комментариев.
{{…}} — печатает переменную или результат выражения в шаблон.
{% …%} — тег, который управляет логикой шаблона. Он в основном используется для выполнения функции.
{# … #} — Синтаксис комментариев. Используется для добавления однострочных или многострочных комментариев.
Базовый шаблон ветки находится в «app / Resources / views / base.html.twig» .
пример
Давайте рассмотрим простой пример с использованием движка ветки.
StudentController.php
<?php namespace AppBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\Response; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class StudentController extends Controller { /** * @Route("/student/home") */ public function homeAction() { return $this->render('student/home.html.twig'); } }
Здесь метод render () визуализирует шаблон и помещает это содержимое в объект Response.
Теперь перейдите в каталог «views» и создайте папку «student», а внутри этой папки создайте файл «home.html.twig». Добавьте следующие изменения в файл.
home.html.twig
//app/Resources/views/student/home.html.twig <h3>Student application!</h3>
Вы можете получить результат, запросив URL «http: // localhost: 8000 / student / home».
По умолчанию Twig поставляется с длинным списком тегов, фильтров и функций. Давайте пройдемся по одному подробно.
Теги
Twig поддерживает следующие важные теги —
Делать
Тег do выполняет функции, аналогичные регулярному выражению, за исключением того, что он ничего не печатает. Его синтаксис выглядит следующим образом —
{% do 5 + 6 %}
Включают
Оператор include включает шаблон и возвращает отображаемое содержимое этого файла в текущее пространство имен. Его синтаксис выглядит следующим образом —
{% include 'template.html' %}
Расширяет
Тег extends может использоваться для расширения шаблона из другого. Его синтаксис выглядит следующим образом —
{% extends "template.html" %}
блок
Блок действует как заполнитель и заменяет содержимое. Имена блоков состоят из буквенно-цифровых символов и символов подчеркивания. Например,
<title>{% block title %}{% endblock %}</title>
встраивать
Тег embed выполняет комбинацию включений и расширений. Это позволяет вам включать содержимое другого шаблона. Это также позволяет вам переопределить любой блок, определенный внутри включенного шаблона, например, при расширении шаблона. Его синтаксис выглядит следующим образом —
{% embed “new_template.twig” %} {# These blocks are defined in “new_template.twig" #} {% block center %} Block content {% endblock %} {% endembed %}
Фильтр
Разделы фильтров позволяют применять обычные фильтры Twig к блоку данных шаблона. Например,
{% filter upper %} symfony framework {% endfilter %}
Здесь текст будет изменен на верхний регистр.
За
Для цикла извлекает каждый элемент в последовательности. Например,
{% for x in 0..10 %} {{ x }} {% endfor %}
Если
Оператор if в Twig похож на PHP. Выражение оценивается как истинное или ложное. Например,
{% if value == true %} <p>Simple If statement</p> {% endif %}
фильтры
Веточка содержит фильтры. Он используется для изменения содержимого перед его отображением. Ниже приведены некоторые из известных фильтров.
длина
Фильтр длины возвращает длину строки. Его синтаксис выглядит следующим образом —
{% if name|length > 5 %} ... {% endif %}
ниже
Нижний фильтр преобразует значение в нижний регистр. Например,
{{ 'SYMFONY'|lower }}
Это дало бы следующий результат —
symfony
Точно так же вы можете попробовать заглавные буквы.
замещать
Фильтр замены форматирует данную строку, заменяя заполнители. Например,
{{ "tutorials point site %si% and %te%."|replace({'%si%': web, '%te%': "site"}) }}
Это даст следующий результат —
tutorials point website
заглавие
Фильтр заголовков возвращает версию значения заголовка. Например,
{{ 'symfony framework '|title }}
Это даст следующий результат —
Symfony Framework
Сортировать
Фильтр сортировки сортирует массив. Его синтаксис выглядит следующим образом —
{% for user in names|sort %} ... {% endfor %}
Отделка
Фильтр обрезки удаляет пробелы (или другие символы) с начала и конца строки. Например,
{{ ' Symfony! '|trim }}
Это даст следующий результат —
Symfony!
функции
Twig поддерживает функции. Используется для получения конкретного результата. Ниже приведены некоторые важные функции Twig.
атрибут
Функция атрибута может использоваться для доступа к «динамическому» атрибуту переменной. Его синтаксис выглядит следующим образом —
{{ attribute(object, method) }} {{ attribute(object, method, arguments) }} {{ attribute(array, item) }}
Например,
{{ attribute(object, method) is defined ? 'Method exists' : 'Method does not exist' }}
постоянная
Функция Constant возвращает постоянное значение для указанной строки. Например,
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
цикл
Функция цикла циклически обрабатывает массив значений. Например,
{% set months = [‘Jan’, ‘Feb’, ‘Mar’] %} {% for x in 0..12 %} { cycle(months, x) }} {% endfor %}
Дата
Преобразует аргумент в дату, чтобы разрешить сравнение даты. Например,
<p>Choose your location before {{ 'next Monday'|date('M j, Y') }}</p>
Это даст следующий результат —
Choose your location before May 15, 2017
Аргумент должен быть в одном из поддерживаемых PHP форматов даты и времени.
Вы можете передать часовой пояс в качестве второго аргумента.
свалка
Функция dump выводит информацию о переменной шаблона. Например,
{{ dump(user) }}
Максимум
Функция max возвращает наибольшее значение последовательности. Например,
{{ max(1, 5, 9, 11, 15) }}
Min
Функция min возвращает наименьшее значение последовательности. Например,
{{ min(1, 3, 2) }}
Включают
Функция include возвращает отображаемое содержимое шаблона. Например,
{{ include('template.html') }}
случайный
Случайная функция генерирует случайное значение. Например,
{{ random([‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’]) }} {# example output: Jan #}
Спектр
Функция Range возвращает список, содержащий арифметическую последовательность целых чисел. Например,
{% for x in range(1, 5) %} {{ x }}, {% endfor %}
Это даст следующий результат —
1,2,3,4,5
Макеты
Макет представляет общие части нескольких представлений, например, заголовок страницы и нижний колонтитул.
Наследование шаблонов
Шаблон может быть использован другим. Мы можем добиться этого, используя концепцию наследования шаблонов. Наследование шаблонов позволяет создавать базовый шаблон «макета», который содержит все общие элементы веб-сайта, определенные как блоки.
Давайте рассмотрим простой пример, чтобы понять больше о наследовании шаблонов.
пример
Рассмотрим базовый шаблон, расположенный в «app / Resources / views / base.html.twig». Добавьте следующие изменения в файл.
base.html.twig
<!DOCTYPE html> <html> <head> <meta charset = "UTF-8"> <title>{% block title %}Parent template Layout{% endblock %}</title> </head> </html>
Теперь перейдите к файлу шаблона индекса, расположенному в «app / Resources / views / default / index.html.twig» . Добавьте в него следующие изменения.
index.html.twig
{% extends 'base.html.twig' %} {% block title %}Child template Layout{% endblock %}
Здесь тег {% extends%} информирует шаблонизатор о необходимости сначала оценить базовый шаблон, который устанавливает макет и определяет блок. Затем дочерний шаблон отображается. Дочерний шаблон может расширять базовый макет и перезаписывать блок заголовка. Теперь запросите URL «http: // localhost: 8000», и вы сможете получить его результат.
активы
Актив управляет созданием URL-адресов и управлением версиями веб-ресурсов, таких как таблицы стилей CSS, файлы JavaScript и файлы изображений.
JavaScript
Чтобы включить файлы JavaScript, используйте тег javascripts в любом шаблоне.
{# Include javascript #} {% block javascripts %} {% javascripts '@AppBundle/Resources/public/js/*' %} <script src="{{ asset_url }}"></script> {% endjavascripts %} {% endblock %}
Stylesheets
Чтобы включить файлы стилей, используйте тег стилей в любом шаблоне.
{# include style sheet #} {% block stylesheets %} {% stylesheets 'bundles/app/css/*' filter = 'cssrewrite' %} <link rel = "stylesheet" href="{{ asset_url }}" /> {% endstylesheets %} {% endblock %}
Изображений
Чтобы включить изображение, вы можете использовать тег изображения. Это определяется следующим образом.
{% image '@AppBundle/Resources/public/images/example.jpg' %} <img src = "{{ asset_url }}" alt = "Example" /> {% endimage %}
Сложные активы
Вы можете объединить много файлов в один. Это помогает уменьшить количество HTTP-запросов и повышает производительность внешнего интерфейса.