Начало работы

Конфигурация

Конфигурация Winter живёт в двух местах: значения — в .env, а поведение — в хуках класса Boot. Никаких config/*.php: что не значение, то код, и наоборот.

.env — значения

Файл создаётся из шаблона при cfg init. Основные переменные:

Переменная Значение
WINTER_KEY 32-байтный секрет проекта — подпись ключей, токены
TIME_ZONE Таймзона для date_default_timezone_set() (напр. UTC)
DEBUG true — отключает кеши маршрутов и DI (живой скан), показывает трейсы в логах и ответах ошибок

Логирование

Winter логирует через winter-logger. Базовые переменные:

Переменная По умолчанию Значение
LOG_LEVEL (пусто) Минимальный уровень. Пусто → логирование выключено
LOG_FORMAT line line или json
LOG_OUTPUT auto auto / stdout / stderr / syslog / file / null
LOG_FILE (авто) Путь к файлу при LOG_OUTPUT=file
LOG_FILE_MAX 30 Сколько суточных файлов хранить
LOG_SYSLOG_IDENT winter Тег программы в syslog

Каналы и переопределения

Есть каналы sys / http / cli; любую переменную можно переопределить для канала префиксом LOG_{CHANNEL}_ (напр. LOG_HTTP_LEVEL=warning). Полный reference — на странице логирования и в доках logger.

База данных

Значения подключения читаются классом DbConfig через env():

Переменная Значение
DB_DRIVER Драйвер (pgsql, mysql…)
DB_HOST, DB_PORT Хост и порт
DB_NAME Имя базы
DB_USER, DB_PASS Учётные данные

Подробнее о классах конфигурации БД — в разделе «База данных».

Boot — поведение

Вся программная настройка — в bootstrap.php, в классе Boot extends BaseBoot. Вы переопределяете только нужные хуки (все, кроме configure(), опциональны). Порядок вызова фиксирован для всех точек входа:

text
1. configure()   → Kernel::init(): пути, .env, логирование, таймзона
2. DI scan       → автопоиск #[Singleton] / #[Request] / #[Transient]
3. providers($c) → ручные привязки, фабрики, значения
4. channels()    → доп. каналы логов
5. plugins()     → подприложения с префиксом маршрута
6. httpCors()    → глобальная политика CORS
7. health()      → эндпоинты /actuator

Минимальный Boot

bootstrap.php
<?php

declare(strict_types=1);

use Flytachi\Winter\K2\BaseBoot;
use Flytachi\Winter\K2\Kernel;

require __DIR__ . '/vendor/autoload.php';

class Boot extends BaseBoot
{
  protected static function configure(): void
  {
      Kernel::init();
  }

  // Остальные хуки опциональны — по умолчанию разумные no-op'ы.
}

Хуки

Хук Зачем
configure() Kernel::init() — пути, .env, логирование, таймзона
providers(Container $c) Ручные привязки DI, фабрики, скалярные значения
channels() Доп. каналы логов через Kernel::channel('job')
httpCors() Глобальный CORS через Cors::configure(...)
health() Эндпоинты /actuator через Health::configure(...)
plugins() Подприложения через Plugin::registry('acme/auth', '/auth')

Пути проекта

Kernel::init() принимает переопределения всех путей (pathPublic, pathStorage, pathResource…). Без аргументов они выводятся из корня проекта — для стандартной раскладки менять ничего не нужно.

Регенерация ключа

bash
php call cfg key -g

Дальше