--- name: project-bicycle-overview description: "Текущее состояние проекта Bicycle — PHP MVC micro-framework, реализованные классы и планы" metadata: type: project --- Проект Bicycle — самописный PHP MVC micro-framework (PHP >= 8.2), автор Egor Isaev. **Why:** Учебный/экспериментальный проект ("изобрести велосипед"). Не предлагать заменить на Laravel/Symfony. **How to apply:** При добавлении фич ориентироваться на стиль существующих классов. Всегда обновлять CLAUDE.md после изменений без напоминаний ([[feedback-update-claude-md]]). ### Уже реализовано (по состоянию на 2026-06-23) **Ядро MVC:** - `Core`, `Route`, `Request`, `Response`, `Controller`, `View`, `MyException` **HTTP-инфраструктура:** - `HTTP` (redirect, request_headers) - `HTTP\Header` (ArrayObject, send) - `HTTP\Message` (интерфейс) - `HTTP\Request` (интерфейс, константы методов) - `HTTP\HTTPException` (factory, get_response) - `HTTP\Exception\HTTPException_302/403/404` - `HTTP\Client\{Request, Curl, Response}` (исходящие запросы) **Состояние и конфиг:** - `Session` (синглтон, именованные сессии) - `Cookie` (статический хелпер) - `Config` (lazy-load + merge config.local.php) **Приложение:** `IndexController` (`indexAction` GET + `postAction` POST — демо HTTP-клиента к jsonplaceholder), шаблон `App/view/Index/index.html`. **Тесты:** 111 тестов, все проходят (`docker exec bicycle vendor/bin/phpunit`). ### Не реализовано / заготовки - `Services/DataBase`, `Services/Mail`, `Services/PDF` — пустые каталоги, кода нет (зависимости PDO/PHPMailer/dompdf в composer.json есть). - `App/Classes/` — отсутствует. - Запланировано: `Model`, `BaseController` (before/after), `Database`+`PdoDriver` (PDO singleton с failover), `Statement` (showQuery/sq), `Repository` (CRUD + транзакции/SAVEPOINT), `Profiler`/`ProfilerPDO`. ### Важные ограничения - Переменная окружения среды — `APP_ENV` (раньше была `MMH_ENV`), задаётся в `.htaccess` через `SetEnv`. - **Никогда не трогать** `/home/isaevea/http/docker-dev/docker/php-apache/8.2.8/Dockerfile` - Apache config: `/home/isaevea/http/docker-dev/conf/Bicycle/apache2/apache2.conf` - `Core::init()` не вызывается в тестовом bootstrap (конфликт с PHPUnit handlers) - PHPStorm: volume `/home/isaevea/http/Bicycle` → `/opt/project`, autoload `/opt/project/vendor/autoload.php`