Download the PHP package phpsoftbox/view without Composer
On this page you can find all versions of the php package phpsoftbox/view. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download phpsoftbox/view
More information about phpsoftbox/view
Files in phpsoftbox/view
Package view
Short Description Simple PHP view renderer for the PhpSoftBox framework
License MIT
Informations about the package view
View
phpsoftbox/view — PHP/PHTML renderer с поддержкой:
- array payload
- DTO payload через
ViewDataInterface ViewContext(layout, partial, meta/css/js)
Contents
- Quick Start
- Payload Types
- render()
- Layouts
- Ошибки в шаблонах
- partialRender()
- renderWithContext()
- partialRenderWithContext()
- ViewContext API
- Helpers
Quick Start
Payload Types
ViewRendererInterface принимает:
array<string, mixed>ViewDataInterface
Для DTO payload объект должен реализовывать ViewDataInterface.
DTO example
render()
render(string $template, array|ViewDataInterface $data = []): string
Назначение:
- full render
- сначала рендерит template
- если в
ViewContextустановлен layout, оборачивает content в layout
render() with array payload
user/show.phtml:
layouts/app.phtml:
render() with DTO payload
user/card.phtml:
Layouts
Layout задаётся шаблоном через $viewContext->setLayout() и относится только к текущему вызову
render() / renderWithContext():
- перед рендером шаблона layout в контексте сбрасывается, после рендера восстанавливается прежнее
состояние. Поэтому вложенный
$viewContext->render()из шаблона не наследует layout внешнего шаблона, а layout вложенного шаблона не применяется к внешнему; - layout, установленный в
ViewContextснаружи до вызоваrenderWithContext(), не применяется — его должен задавать сам шаблон; partialRender()/partialRenderWithContext()layout не применяют: вызовsetLayout()внутри partial-шаблона влияет на ближайший внешнийrender().
Вложенные layouts
Layout может сам вызвать setLayout() — тогда его результат оборачивается в родительский layout
(и так далее по цепочке). Глубина вложенности ограничена 10 уровнями: циклическая ссылка
(layout указывает сам на себя) приводит к RuntimeException.
page.phtml:
layouts/admin.phtml:
Результат: layouts/app.phtml с $content = вывод layouts/admin.phtml, внутри которого вывод page.phtml.
Ошибки в шаблонах
Если шаблон выбрасывает исключение, renderer удаляет частичный вывод и все буферы вывода, открытые
шаблоном, после чего пробрасывает исключение дальше. Уровень ob_get_level() возвращается к исходному,
поэтому в долгоживущих worker'ах буферы не накапливаются. Буферы, которые шаблон открыл и не закрыл
при успешном рендере, сливаются в результат рендера.
partialRender()
partialRender(string $template, array|ViewDataInterface $data = []): string
Назначение:
- рендерит только указанный template
- layout не применяется
partialRender() with array
partialRender() with DTO
renderWithContext()
renderWithContext(string $template, array|ViewDataInterface $data, ViewContext $context): string
Назначение:
- advanced API
- позволяет переиспользовать один и тот же
ViewContextмежду несколькими рендерами - полезно, когда контекст создаётся/настраивается снаружи
renderWithContext() with array
renderWithContext() with DTO
partialRenderWithContext()
partialRenderWithContext(string $template, array|ViewDataInterface $data, ViewContext $context): string
Назначение:
- advanced partial render
- рендерит только template
- использует переданный
ViewContext(meta/css/js/layout state)
partialRenderWithContext() with array
partialRenderWithContext() with DTO
ViewContext API
ViewContext доступен в шаблоне как $viewContext.
Основные методы:
setLayout(string $template, array|LayoutTemplateDataInterface $data = [])clearLayout()partialRender(string $template, array|ViewDataInterface $data = [])addMeta(string $name, string $content, array $attributes = [])addStyle(string $href, array $attributes = [])addScript(string $src, array $attributes = [])renderMeta(): stringrenderStyles(): stringrenderScripts(): string
DTO access to context
Если DTO должен вызывать partial/layout API, реализуйте ViewContextAwareInterface.
Helpers
В шаблонах используйте helper-функции:
html(mixed $value): string— escaped outputraw(mixed $value): string— trusted raw output
Пример: