TwigView
Medusa\Frontend\TwigView отвечает за серверный рендер Twig-шаблонов.
Инициализация класса
В рамках HTTP-запроса класс инициализируется автоматически при загрузке приложения:
Medusa\Frontend\TwigView::addSrcPath(Medusa\Frontend\Path $srcPath). В метод передаётся source-путь,
сформированный на основе src[].path из www/config/frontend.json.
Выбор frontend-сущности
Для работы с Twig используется фабричный метод Medusa\Frontend\TwigView::from($entity), где
$entity — имя каталога внутри одного из зарегистрированных source-путей frontend:
use Medusa\Frontend;
$twigView = Frontend\TwigView::from('themes');
Рендер шаблона
Рендер выполняется методом $twigView->render($name, $data = []), где $name — имя каталога
внутри зарегистрированного source-каталога frontend, например, внутри www/frontend/{entity}/, а
$data — контекст Twig:
$result = $twigView->render('default', [
'lang' => 'ru',
'title' => 'Приветствие',
'content' => "<h1>Добро пожаловать!</h1>\n\t<p>Это страница приветствия!</p>",
]);
$html = $result->html;
Метод render() возвращает объект с полем html. В этом поле находится готовая HTML-строка
отрендеренного Twig-шаблона.
Пример содержимого файла www/frontend/themes/default/index.html.twig:
<!doctype html>
<html lang="{{ lang | default('en') }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title | default('Page') }}</title>
</head>
<body>
{{ content | raw }}
</body>
</html>
Изменение имени шаблона
Для изменения имени рендерируемого Twig-файла используется метод
$twigView->setIndexFilename($filename):
$twigView->setIndexFilename('view.html.twig');