Быстрый старт: явный JSON-маршрут
Руководство использует Web scaffold вместе с Engine, HTTP engine и Router. Отдельный Engine — ещё не готовое приложение. Web требует PHP ^8.2, curl и json; зависимости добавляют требования, в том числе intl. Отдельный Engine объявляет PHP ^8.1 и Server ^4. Не подменяйте Server 4 на Server 7 в этом scaffold.
Создание и проверка приложения
Заголовок раздела «Создание и проверка приложения»composer create-project triangle/web my-appcd my-appcomposer check-platform-reqscomposer show --directcomposer show localzet/serverСохраните полученный composer.lock. Успешное разрешение зависимостей не доказывает совместимость при запуске: см. ограничения. Указанный в старой документации порт 88 не соответствует текущему Web: в config/server.php default — http://127.0.0.1:8000. Файл окружения может его переопределить. Проверьте SERVER_LISTEN в своём .env; для локальной разработки оставьте loopback. Не переносите реальные credentials в примеры.
Определение маршрута
Заголовок раздела «Определение маршрута»Замените config/route.php:
<?php
declare(strict_types=1);
use Triangle\Request;use Triangle\Response;use Triangle\Router;
Router::get('/api/hello/{name}', static function (Request $request, string $name): Response { return responseJson(['message' => 'Hello, ' . $name]);});Файл выполняет регистрацию маршрутов, а не возвращает конфигурационный массив. responseJson() сразу создаёт JSON-ответ. response()->json() и Triangle\View\View::render() не соответствуют API этих исходников. Scaffold использует app\controller и app/controller; на Linux сохраняйте регистр namespace и путей.
Конфигурация локального worker
Заголовок раздела «Конфигурация локального worker»В config/server.php явно приведите значение окружения к числу:
'count' => (int) env('SERVER_COUNT', 1),В сверенном scaffold строка окружения передаётся без приведения; при SERVER_COUNT=1 типизированный helper Server может завершиться с TypeError. Изолированная проверка использует это приведение и отключает необязательный process monitor: config/process.php возвращает пустой массив. Это проверка минимального маршрута, а не всех фоновых процессов и production-настроек.
Запуск и проверка
Заголовок раздела «Запуск и проверка»php master startВ другом терминале:
curl -i http://127.0.0.1:8000/api/hello/ReaderМаршрут должен вернуть HTTP 200, Content-Type: application/json и {"message":"Hello, Reader"}. Передний процесс останавливается Ctrl+C. После изменения PHP-кода перезагружайте workers: долгоживущий процесс не читает каждый файл заново на каждый запрос.
Выбор helper ответа
Заголовок раздела «Выбор helper ответа»responseJson($data, $status, $headers)сериализует переданные данные напрямую.response($data, $status)может добавлять оболочкуstatus/data, debug, выбирать представление и учитыватьapp.http_always_200. Он не взаимозаменяем с фиксированным JSON-контрактом.view('index/view', ['name' => 'Triangle'])использует настроенный renderer. Не рассчитывайте на наличие фасадаView.
Для маршрутов с БД дополнительно нужны подключение, миграции, политика модели, валидация ввода и авторизация. POST с одним User::create() — не безопасный шаблон API; эти задачи не входят в минимальный пример.
Источники: Web scaffold, helper Engine, helper View. Проверено 2026-10-17. У Web сохраняется MIT; лицензии компонентов учитываются отдельно. Новый пример: AGPL-3.0-or-later, Ivan Zorin / Localzet Group.