Перейти к содержимому
docs.
WORKSPACE

Документации проектов

Открыть каталог проектов
Localzet ServerАсинхронный PHP-серверTriangleФреймворк и компоненты✓MIX IDИдентификация и интеграцииHack APIПубличные API хакатонаACNПроект и компонентыUserlay / UserNetПроект и компонентыAxiomПроект и компонентыМесседжинг через почтуПроект и компонентыLWT / JWT / JOSEПроект и компонентыФинансовая аналитика KimaiПроект и компонентыМультипарадигмальная БДПроект и компонентыZorin PlatformПроект и компонентыZorin TrustПроект и компонентыFloraScope / VegwatchПроект и компонентыaegis-qДокументация проектаaevumdbДокументация проектаauditДокументация проектаauto-invest-managerАвтотрейдерcaine-companionДокументация проектаcertbot-cloudflareДокументация проектаClusterLocalzet Server / ClustercmdveilДокументация проектаConsolePHP CLICronБиблиотеки Localzet Serverdata-connectorДокументация проектаdevice-controlDevice Controlenn-projectДокументация проектаEventsБиблиотеки Localzet ServerflowsintДокументация проектаforgeДокументация проектаHttpClientБиблиотеки Localzet ServerinterpreterСобственный языкinvariaДокументация проектаkeynotesДокументация проектаknotrouteKnotroutelaravel-personal-analyticsДокументация проектаlocalzet-osДокументация проектаmeridianДокументация проектаMQTTБиблиотеки Localzet Servernano-kernelСобственная ОСNoterДокументация проектаpersonal-analyticsДокументация проектаProxyБиблиотеки Localzet ServerPSRБиблиотеки Localzet ServerPSR-7Библиотеки Localzet Serverrschs-monitorДокументация проектаsemsealДокументация проектаshardsealДокументация проектаSocketIOБиблиотеки Localzet ServerSOCKS5Библиотеки Localzet Serverstandalone-analyticsДокументация проектаstatic-php-cliДокументация проектаStorageБиблиотеки Localzet ServersutureДокументация проектаtempoweaveДокументация проектаttsСинтез речиTunnelБиблиотеки Localzet Serverui-kitUI KitvesperДокументация проектаWebAnalyzerWebAnalyzerzorin-access-brokerДокументация проектаzorin-authority-brokerДокументация проектаzorin-authority-sdk-phpДокументация проектаzorin-authority-sdk-pythonДокументация проектаzorin-authority-sdk-tsДокументация проектаzorin-client-intelДокументация проектаzorin-device-core-aospДокументация проектаzorin-host-agentДокументация проектаzorin-native-labДокументация проектаzorin-nodeДокументация проектаzorin-opsДокументация проектаdonstu-python-sdkДокументация проектаfloortraceFloortraceserver-rsLocalzet Server / Cluster
Каталог

Triangle View превращает шаблон и данные в HTTP-ответ. Компонент предоставляет функции view/raw_view/blade_view/think_view/twig_view, выбор render handler и данные текущего request. Он работает с Raw PHP, Blade, Twig и ThinkPHP; конкретный сторонний движок устанавливается отдельно.

Окно терминала
composer require triangle/view

Требуются PHP ^8.1 и triangle/engine ^8.1. В view.php параметр handler выбирается по VIEW_HANDLER: raw по умолчанию, blade, think или twig. Неизвестное значение вызывает ошибку match, а не переключение на Raw.

Пакет не объявляет Twig/Blade/ThinkPHP обязательными зависимостями. Соответствующие render-классы обращаются к Twig Environment, Jenssegers Blade или think Template. Подключите совместимую версию движка в приложении до его выбора.

return view('account/profile', [
'displayName' => 'Reader',
]);

В обычном приложении с пустым app и стандартной конфигурацией Raw это файл app/view/account/profile.phtml. Суффикс берётся из view.options.view_suffix; поставляемое значение — phtml.

Raw-шаблон:

<h1><?= htmlspecialchars($displayName, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') ?></h1>

Raw исполняет PHP и сам не экранирует вывод. Передавайте в него доверенный шаблон и явно экранируйте пользовательские значения под контекст HTML/атрибута/URL. Имя шаблона и app/plugin не должны выбираться из непроверенного пути пользователя.

Относительное имя ищется в app/view, а при непустом имени приложения — в app/{app}/view. Для плагина базой становится plugin/{plugin}/app. Имя с начальным / отсчитывается от корня проекта, а не от корня файловой системы.

При template=null helper пытается получить имя из controller и action текущего request: controller преобразуется в путь view, CamelCase — в snake_case. Вне контроллера задавайте template явно; пустая строка не является обозначением «автоматический шаблон».

Blade использует имена и правила собственного движка, а не просто дописывает view_suffix как Raw/Twig/ThinkPHP. Для Twig и Blade создаётся кеш экземпляров по пути шаблонов; изменение options в работающем процессе не обязательно перестроит уже созданный экземпляр.

use Triangle\View\Support\View;
View::assign('displayName', 'Reader');
$variables = View::vars();

Правильное имя класса — Triangle\View\Support\View. Данные assign хранятся в request->_view_vars. Это изоляция по объекту запроса, а не глобальное состояние пользователей. Twig, Blade и ThinkPHP объединяют их с явными vars; явные значения имеют приоритет.

У Raw есть отличие: render не получает локальную переменную request перед проверкой _view_vars, поэтому данные assign не извлекаются этим путём. Для Raw передавайте данные непосредственно вторым аргументом view/raw_view. View::vars при этом продолжает возвращать записанные данные текущего request.

Raw читает view.options.pre_renders и post_renders. Унаследованные списки pre/post хранятся статически и дополняются при каждом render. Getter post ошибочно читает список pre; array_unique применяется к массивам описаний шаблонов и может выдавать предупреждения о преобразовании Array в string.

Не используйте эти списки как надёжный per-request layout-механизм до отдельного исправления. Для Raw объединяйте части в своём доверенном шаблоне, а для внешнего движка используйте его штатные layouts/includes.

Raw пропускает отсутствующий файл через file_exists: результат может быть пустой строкой без исключения. Проверьте путь, app/plugin и view_suffix прежде, чем искать проблему в HTTP-слое.

Исключение во время include очищает Raw output buffer и передаётся выше. Внешние движки используют собственные ошибки loader/syntax/runtime. Не перехватывайте любую такую ошибку с успешным пустым ответом: ошибки шаблона должны попадать в закрытую диагностику приложения.

ВызовПоведение
view(template = null, vars = [], app = null, plugin = null, http_code = 200)Triangle Response с выбранным config handler
raw_view(template = null, vars = [], app = null, plugin = null)Raw Response, статус 200
blade_view(...)Blade Response, статус 200
think_view(...)ThinkPHP Response, статус 200
twig_view(...)Twig Response, статус 200
responseView(data, status = null, headers = [])Ответ через системный Raw-шаблон success/error

Если первый аргумент view — массив, он становится vars, а template определяется автоматически. Для нестандартного статуса используйте пятый аргумент view. Функции специализированных движков этого аргумента не имеют.

ResponseView выбирает success только при статусе 200, иначе error. Если исходный status равен 200 или 500 и data.status — числовое значение от 100 до 599, оно заменяет status. Параметр status=null не является явным успешным статусом: передавайте требуемый код.

RenderInterface::render(string $template, array $vars, string $app = null): string задаёт минимальный контракт. Реализации Raw/Blade/ThinkPHP/Twig дополнительно принимают plugin. Сам интерфейс не описывает поддержку assign, vars, pre/post или plugin; custom handler для всех helper-вызовов должен обеспечивать используемые приложением методы.

AbstractRender предоставляет assign, vars, build, addPreRender/getPreRenders, addPostRender/getPostRenders. Assign поддерживает массив либо name/value; необязательный merge_recursive включает array_merge_recursive, которое при совпадении скалярных ключей создаёт массив значений, а не просто заменяет старое значение.

Build вычисляет путь из template/app/plugin и view.options.view_suffix. Он не проверяет, находится ли полученный путь внутри разрешённой директории: template и параметры пути должны быть доверенными.

ДвижокОсобенности
RawPHP include; options.vars и явные vars; нет автоматического escaping
TwigFilesystemLoader и Environment; options передаются Environment; extension callback вызывается при создании кешированного экземпляра
BladeJenssegers Blade, compiled cache в runtime/views; extension callback при создании экземпляра
ThinkPHPНовый think Template на render; view_path/cache_path/view_suffix объединяются с options

У plugin собственные настройки через {plugin_alias}.{plugin}.view; стандартный alias — plugin. Некоторые вычисления автоматического template используют буквальный plugin prefix, поэтому изменение alias требует отдельной проверки соответствующего пути.

Raw::renderSys(string $template, array $vars): false|string берёт путь из view.templates.system.{template}, иначе использует Templates/{template}.phtml пакета. В отличие от обычного Raw render здесь получается текущий request и извлекаются назначенные vars. Наличие поставляемого шаблона проверяйте в установленном пакете; fallback-путь не гарантирует файл.