Files
pinecore/.claude/development/patterns.md

112 lines
3.3 KiB
Markdown
Raw Normal View History

2026-04-06 18:47:11 +03:00
# Code Patterns
Переиспользуемые паттерны кодовой базы. Используй существующие — не изобретай новые без необходимости.
---
## 1. Kernel — статический контейнер
```php
// Инициализация (один раз при старте воркера)
Kernel::init($container);
// Получение сервиса
$service = Kernel::getContainer()->get(MyService::class);
```
Kernel хранит единственный инстанс контейнера на весь процесс воркера.
---
## 2. ContainerFactory — сборка контейнера
```php
$factory = new ContainerFactory($config, $environment);
$container = $factory->build();
```
Autoload: все файлы из `routes/` и `services/` подхватываются автоматически.
Не регистрируй маршруты и сервисы вручную в `index.php` — кладёт файлы в соответствующие директории.
---
## 3. Router и RouteDefinition
```php
// routes/api.php
return [
new RouteDefinition('GET', '/users/{id}', UserController::class, 'show'),
];
```
Router находит нужный маршрут по методу и пути, извлекает параметры и вызывает контроллер.
---
## 4. Middleware — цепочка обработки запроса
```php
class MyMiddleware implements MiddlewareInterface {
public function handle(Request $request, callable $next): Response {
// до
$response = $next($request);
// после
return $response;
}
}
```
Middleware регистрируются в контейнере и применяются ко всем запросам в воркере.
---
## 5. ORM — атрибуты сущностей
```php
#[Collection('users')]
class UserEntity {
#[Field('_id')]
public string $id;
#[Field('name')]
public string $name;
}
```
Repository наследует базовый класс и получает методы `find`, `findOne`, `save`, `delete` из коробки.
---
## 6. JWT Auth
```php
// AuthMiddleware автоматически валидирует Bearer-токен
// В контроллере — получить текущего пользователя из request
$user = $request->getAttribute('user');
```
`JwtService` отвечает за выпуск и верификацию токенов. Конфиг: секрет и TTL через `Config`.
---
## 7. Config — конфигурация
```php
$value = Config::get('key');
$value = Config::get('section.key', $default);
```
Конфиг загружается из `environment.php` (или `.env`). Доступен глобально через статический метод.
---
## 8. WorkerRunner — цикл обработки запросов
```php
// Внутри worker.php
$runner = new WorkerRunner($kernel);
$runner->run(); // FrankenPHP loop: запрос → роутинг → middleware → контроллер → ответ
```
`WorkerRunner` перехватывает исключения и возвращает корректный HTTP-ответ даже при ошибке.