Учебники

Symfony — Просмотр движка

Уровень представления — это уровень представления приложения 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-запросов и повышает производительность внешнего интерфейса.