Шаблоны

Когда 20 лет назад был создан PHP, разработчики полюбили его простоту и то, как он хорошо сливался с HTML и динамическим кодом. Но с прошествием времени, были созданы другие языки шаблонов, вроде Twig, чтобы сделать шаблоны ещё лучше.

Best Practice

Используйте формат шаблонов Twig для ваших шаблонов.

Просто говоря, PHP-шаблоны более подробные по сравнению с Twig, так как им не хватает родной поддержки для большинства современных функций, необходимых шаблонам, вроде наследования, автоматического экранирования, названных аргументов для фильтров и функций.

Twig это формат шаблонов по умолчанию в Symfony, который имеет наибольшую поддержку общества всех не-PHP шаблонизаторов (он используется в высококлассных проектах вроде Drupal 8).

Расположение шаблонов

Best Practice

Храните шаблоны вашего приложения в каталоге templates/ в корне вашего проекта.

Централизация ваших шаблонов в одном месте упрощает работу ваших дизайнеров. Кроме того, использование этого каталога упрощает нотацию, используемую при ссылании на шаблоны (например, $this->render('admin/post/show.html.twig') вместо $this->render('@SomeTwigNamespace/Admin/Posts/show.html.twig')).

Best Practice

Используйте snake_case нижнего регистра для имён каталогов и шаблонов.

Эта рекомендация совпадает с лучшими практиками Twig, где имена переменных и шаблонов также должны использовать snake_case нижнего регистра (например, user_profile вместо userProfile, и edit_form.html.twig вместо EditForm.html.twig).

Best Practice

Используйте нижнее подчёркивание с префиксом в именах шаблонов для частичных шаблонов.

Вам часто будет хотеться использовать код шаблона повторно, используя функцию include, чтобы избежать излишнего кода. Чтобы с лёгкостью определить эти части в системе файлов, вам необходимо добавлять к частичным шаблонам и любым другим щаблонам без тела HTML или тега extends префикс в виде одного нижнего подчёркивания.

Расширения Twig

Best Practice

Определите ваши расширения Twig в каталоге src/Twig/. Ваше приложение будет автоматически определять и конфигурировать их.

Нашему приложению нужен пользовательский фильтр Twig md2html, чтобы мы могли трансформирвать содержимое Markdown каждого поста в HTML. Чтобы сделать это, создайте новый класс Markdown, который будет использован позже расширением Twig. Ему просто надо определять один метод для преобразования содержания Markdown в HTML:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
namespace App\Utils;

class Markdown
{
    // ...

    public function toHtml(string $text): string
    {
        return $this->parser->text($text);
    }
}

Далее, создайте новое расширение Twig и определите фильтр под названием md2html, используя класс TwigFilter. Внедрите новопределённый класс Markdown в конструктор расширения Twig:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
namespace App\Twig;

use App\Utils\Markdown;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;

class AppExtension extends AbstractExtension
{
    private $parser;

    public function __construct(Markdown $parser)
    {
        $this->parser = $parser;
    }

    public function getFilters()
    {
        return [
            new TwigFilter('md2html', [$this, 'markdownToHtml'], [
                'is_safe' => ['html'],
                'pre_escape' => 'html',
            ]),
        ];
    }

    public function markdownToHtml($content)
    {
        return $this->parser->toHtml($content);
    }
}

Вот и всё!

Если вы использоуете конфигурацию services.yaml по умолчанию, то вы закончили! Symfony автоматически узнает о вашем новом сервисе и тегирует его для использования в качестве расширения Twig.


Далее: Forms

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.