Files
pinecore/.claude/development/patterns.md
2026-04-06 18:47:11 +03:00

112 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-ответ даже при ошибке.