phpsoftbox / app-backend
Backend application skeleton for PhpSoftBox
Requires
- php: ^8.5
- phpsoftbox/application: ^1.0
- phpsoftbox/auth: ^1.0
- phpsoftbox/cache: ^1.0
- phpsoftbox/cli-app: ^1.0
- phpsoftbox/collection: ^1.0
- phpsoftbox/config: ^1.0
- phpsoftbox/container: ^1.0
- phpsoftbox/cookie: ^1.0
- phpsoftbox/database: ^1.0
- phpsoftbox/encryptor: ^1.0
- phpsoftbox/env: ^1.0
- phpsoftbox/http-emitter: ^1.0
- phpsoftbox/http-message: ^1.0
- phpsoftbox/inertia: ^1.0
- phpsoftbox/inflector: ^1.0
- phpsoftbox/orm: ^1.0
- phpsoftbox/profiler: ^1.0
- phpsoftbox/request: ^1.0
- phpsoftbox/resource: ^1.0
- phpsoftbox/router: ^1.0
- phpsoftbox/session: ^1.0
- phpsoftbox/storage: ^1.0
- phpsoftbox/validator: ^1.0
- phpsoftbox/vite: ^1.0
- psr/log: ^3.0
Requires (Dev)
- phpsoftbox/cs-fixer: ^1.2.2
- phpsoftbox/test-utils: ^1.0
- phpunit/phpunit: ^13.3
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-29 11:50:08 UTC
README
Минимальный backend‑скелет приложения на PhpSoftBox.
Установка через create-project
composer create-project phpsoftbox/app-backend my-app
Быстрый старт
- Окружение после
create-projectбудет создано автоматически —config/env/.envиз примера со случайнымAPP_KEY(composer app:generate-key). Вручную:
cp config/env/.env.example config/env/.env composer app:generate-key
APP_ENV — dev, test, demo или prod (production, development, local, testing приводятся к ним);
неизвестное значение — ошибка конфигурации.
- Установи зависимости:
composer install yarn install
- Запусти Vite:
yarn dev
Структура
src/Cli- handlers консольных команд приложенияsrc/Feature/{FeatureName}/Command/*- command + handler бизнес-сценариевsrc/Http/Action- invokable HTTP actionssrc/Http/Request-RequestSchemasrc/Http/Resource- API resourcessrc/Inertia- базовые shared data providers для Inertiasrc/Rule- кастомные validation rulesdatabase/fixtures- fixtures для интеграционных тестов и seed-like сценариевdatabase/migrations- base-skeleton миграции, включаяusers,user_tokens, roles/permissionslocal- runtime-корень приложения;storage,logs,cacheсоздаются черезApp\Path
Auth recipe использует DatabaseUserProvider, SessionGuard, remember-cookie
restore flow и AreaAccessMiddleware для admin area. Минимальные таблицы
users, user_tokens, roles, permissions, role_permissions,
user_roles, user_permissions лежат в database/migrations.
Для кастомного приложения package-миграции можно опубликовать из vendor:
php psb db:migrate:publish --package=phpsoftbox/auth php psb db:migrate:publish --package=phpsoftbox/session
По умолчанию session хранится через native PHP session. DB session storage
включается явно через APP_SESSION_DRIVER=database.
SSR для Inertia выключен по умолчанию. Включайте его явно через INERTIA_SSR=1
и настройку VITE_SSR_URL, когда SSR server реально запущен.
Теги dev-сервера Vite выводятся только в окружении dev (или при vite.dev = true в конфиге); в остальных
окружениях нужен собранный public/build/manifest.json (yarn build).
Продакшен
-
APP_ENV=prod: DI-контейнер компилируется вlocal/cache/di. При деплое послеcomposer installсбросьте его до перезапуска воркеров, иначе останется контейнер от прошлой версии кода:php psb container:cache:clear php psb config:cache:clear # если включён кеш конфигурации -
За балансировщиком задайте
APP_TRUSTED_PROXIES— иначе IP клиента и схема будут адресом и схемой балансировщика. -
Необработанные исключения пишутся в
local/logs/app.log(App\Runtime\FileLogger, по строке JSON на запись). Для ротации и каналов заменитеLoggerInterfaceвconfig/definitions/http.phpна полноценный логгер. -
Долгоживущий процесс (воркер очереди, RoadRunner/Swoole): после каждой задачи или запроса вызывайте
$container->get(ServicesResetter::class)->reset()— сбрасывает warmup БД, identity map ORM, кеш прав и очередь cookie, состояние Inertia (share, хлебные крошки, meta, вкладки) (config/definitions/runtime.php). Для воркераphpsoftbox/queue— параметрresetStateуWorker. -
Эндпоинты профайлера (
PROFILER_ENDPOINT, по умолчанию/__profiler/api/traces) регистрируются только вdevприPROFILER_ENABLED=1: они отдают трассы запросов без авторизации. -
Хранилище трасс ограничено:
PROFILER_MAX_TRACES(500) иPROFILER_MAX_AGE_SECONDS(сутки, только file); сбои сохранения трасс пишутся в лог, запрос не падает. -
Корень local-дисков Storage без своего
rootPath—local/storage(абсолютный путь изPath).
Проверки
composer test
composer cs:check