Видео также применимо для версии Symfony 5.

Итак, мы с вами остановились на том, что наш контроллер возвращает некую HTML разметку.

     /**
     * @Route("/main", name="main")
     */
    public function index()
    {
        return new Response("<html><head></head><body>123</body></html>");
    }

Это становится возможным благодаря объекту Response, который является экземпляром класса Symfony\Component\HttpFoundation\Response.

Этот объект возвращает нам некую простую HTML-страницу, которая доступна нам по следующему пути (роуту) /main.

Теперь давайте сделаем так, чтобы html-разметку нам возвращал не объект Response, а файл шаблонизатора Twig, который был создан у нас при создании контроллера автоматически.

Давайте раскомментируем этот код и в итоге это будет выглядеть так:

     /**
     * @Route("/main", name="main")
     */
    public function index()
    {
        return $this->render('main/index.html.twig');
    }

Все файлы шаблонизатора Twig находятся в корневой папке templates. Для нашего контроллера была создана специальная подпапка main и в ней был создан файл index.html.twig.

 

Давайте удалим в этом файле весь лишний и непонятный код и просто вставим туда базовую разметку HTML-страницы, которую мы выводили в объекте Response.

<html><head></head><body>123</body></html>

По сути, в этом файле будет располагаться обычный html-код. Ничего лишнего здесь нет. 

Функцией:

return $this->render('main/index.html.twig');

в контроллере мы просто выводим эту разметку внутри шаблонизатора Twig.

Это становиться возможным благодаря функции render, которая находится внутри AbstractController, который мы расширяем нашим контроллером MainController.

В качестве параметра метода render указывается путь к тому файлу шаблона Twig, который мы с вами подключаем. 

В данном случае файл находится в папке main.

Только что мы с вами создали первый файл нашего шаблонизатора. Это обычный html-код и этот код мы соответственно вывели с помощью функции render.

Таким образом это работает.