View brick
Поки відповідь — рядок у controller, HTML швидко стає
нечитабельним: layout, форми, partials. addView()
на ConceptStack дає
ViewResponseFactory і шаблони замість конкатенації
рядків. Потрібен уже увімкнений
Http — view малює HTTP-відповідь.
Повертає ViewBuilder: далі обираєш engine Twig або
Plates (лише один — XOR). Мінімальна збірка —
у рецепті HTML-сторінки.
Коли не додавати View: чистий JSON API. Тоді
ErrorHandling краще з withJsonRenderer(), без Twig.
Методи ViewBuilder:
| Метод | Параметри | Опис | Залежність |
|---|---|---|---|
setPaths() |
array<string, string> $paths |
Додаткові namespace → абсолютні шляхи до шаблонів | — |
setExtensions() |
list<class-string> $extensions |
Class-string список engine-extensions (Twig / Plates) | — |
setRouteNamespaces() |
array<string, string> $routeNamespaces |
Map route prefix → view namespace | — |
withTwig() |
— → ViewTwigBuilder |
Увімкнути Twig | — (XOR з Plates, обов’язково один engine) |
withPlates() |
— → ViewPlatesBuilder |
Увімкнути Plates | — (XOR з Twig) |
Методи ViewTwigBuilder (після withTwig()):
| Метод | Параметри | Опис | Залежність |
|---|---|---|---|
setViewsPath() |
string $viewsPath |
Корінь шаблонів Twig | — (обов’язково) |
setCacheDir() |
string $cacheDir |
Каталог compiled cache; без нього — без filesystem cache | — |
setDebug() |
bool $debug = true |
Twig debug mode | — |
setDefaultExtension() |
string $defaultExtension |
Суфікс файла, якщо в імені шаблону його немає (default .twig) |
— |
Методи ViewPlatesBuilder (після withPlates()):
| Метод | Параметри | Опис | Залежність |
|---|---|---|---|
setViewsPath() |
string $viewsPath |
Корінь шаблонів Plates | — (обов’язково) |
setDefaultExtension() |
string $defaultExtension |
Суфікс файла (default .php) |
— |
setPaths()
$stack->addView()
->setPaths([
'admin' => $rootPath . 'resources/views/admin',
])
->withTwig()
->setViewsPath($rootPath . 'resources/views');
Коли шаблони живуть не лише в одному корені (адмінка, пакет,
тема) — іменовані namespace уникають колізій імен. Основний
корінь задає engine через setViewsPath();
setPaths() — додаткові корені для
View registry.
setExtensions()
$stack->addView()
->setExtensions([AppTwigExtension::class])
->withTwig()
->setViewsPath($rootPath . 'resources/views');
Власні функції/фільтри Twig (або helpers Plates) без хаків у
controller: class-string розширень resolve-яться з контейнера
під час boot. Не плутати з setDefaultExtension() —
то суфікс імені файла шаблону, не engine-extension.
setRouteNamespaces()
$stack->addView()
->setRouteNamespaces([
'admin.' => 'admin',
])
->withTwig()
->setViewsPath($rootPath . 'resources/views');
Коли error renderer або glue підбирає каталог шаблонів за route name — map префікса імені маршруту → view namespace знімає if/else у коді. Для простої однієї поверхні можна не викликати.
withTwig()
$stack->addView()
->withTwig()
->setViewsPath($rootPath . 'resources/views')
->setCacheDir($rootPath . 'storage/cache/views')
->setDebug($debug);
Увімкнює extension-view-twig
і повертає ViewTwigBuilder. У рецепті з кроку 7
після setViewsPath() додають setCacheDir() і
setDebug($debug). Один engine на
addView(): разом із withPlates()
збірка не пройде — свідомий XOR, щоб не тримати два різні
синтаксиси шаблонів у одному додатку.
Twig: setViewsPath()
Абсолютний шлях до основного кореня Twig (FilesystemLoader).
Без нього збірка не пройде валідацію — engine не знає, де
шукати index. Приклад — у
кроці 2.
Twig: setCacheDir()
Compiled templates на диску прискорюють production. У рецепті
вмикається з кроку 7
разом із setDebug($debug): при debug compile cache
вимкнений (зручно при git checkout тегів), без debug —
cache на диску. На кроках 2–6 рецепта setCacheDir не
викликають — лише setViewsPath().
Twig: setDebug()
Увімкнює Twig debug (і DebugExtension у provider). Разом із
setCacheDir() при true вимикає filesystem
compile cache. У рецепті прив’язано до $debug
(APP_DEBUG) з кроку 7 — той самий прапорець, що
для Whoops у ErrorHandling, але це окремий параметр Twig builder-а.
Twig: setDefaultExtension()
$stack->addView()
->withTwig()
->setViewsPath($rootPath . 'resources/views')
->setDefaultExtension('.html.twig');
Щоб у controller писати create('index'), а не
create('index.twig'): суфікс дописується, якщо
його ще немає. Default у extension — .twig.
Якщо передати повну назву з обраним суфіксом — повторно не
дописується.
withPlates()
$stack->addView()
->withPlates()
->setViewsPath($rootPath . 'resources/views')
->setDefaultExtension('.php');
Альтернатива Twig: чистий PHP у шаблонах через
extension-view-plates.
Обирайте, коли команда вже на Plates або не хоче окремої
мови шаблонів. XOR з withTwig().
Plates: setViewsPath()
Абсолютний корінь шаблонів Plates. Обов’язковий з тієї ж причини, що й у Twig: без шляху engine нічого не відмалює.
Plates: setDefaultExtension()
Суфікс файла (default .php). Той самий сенс, що й
Twig setDefaultExtension(): коротші імена в
ViewResponseFactory::create().
Рецепт з Twig — HTML-сторінки. Пакети: View, View Twig, View Plates.