Casting brick
HTTP віддає рядки; домен хоче int, bool, DTO. Без спільного
caster кожен controller пише свій cast — і роз’їжджаються
крайні випадки. addCasting() на
ConceptStack реєструє
extension-casting-valinor
як CasterInterface і повертає
CastingBuilder.
Capability опційна: FormRequest і Validation
працюють без неї. Потрібна, коли FormRequest викликає
toDto() або Http вмикає
withTypedRouteParameters() (Stack
require Casting). Рецепт —
Casting і DTO.
Методи CastingBuilder:
| Метод | Параметри | Опис | Залежність |
|---|---|---|---|
setCacheDir() |
string $cacheDirectory |
Каталог Valinor FileSystemCache | — |
setTransformers() |
list<class-string> $transformerClasses |
Custom Valinor converters | — |
setDebug() |
bool $debug = true |
FileWatchingCache у dev (перебудова при зміні DTO) | — |
setCacheDir()
$stack->addCasting()
->setCacheDir($rootPath . 'storage/cache/casting');
Без cache Valinor будує mapper на кожен запит — ок для мікро-демо, погано під навантаженням. Каталог має бути writable процесом PHP.
setTransformers()
$stack->addCasting()
->setTransformers([
MyDateTimeConverter::class,
]);
Opt-in для доменних перетворень (дати, value objects), яких немає «з коробки». У базовому рецепті не потрібні — достатньо scalar + DTO з публічним конструктором.
setDebug()
$stack->addCasting()
->setCacheDir($rootPath . 'storage/cache/casting')
->setDebug(true);
У dev обгортає cache у FileWatchingCache: змінили DTO —
mapper оновлюється без ручного очищення каталогу. На проді
зазвичай false.
Хто споживає Caster
-
FormRequest —
$dtoClass+toDto()(optionalCasterInterfaceу factory) — основний сценарій рецепта -
Http (opt-in) —
withTypedRouteParameters()→ явний cast route vars (DTO / суворіший fail на смітті в URL). Для простогоint $idз числовим сегментом Reflection і так коерсить string→int без цього opt-in.
Мінімальний фрагмент
$stack->addCasting()
->setCacheDir($rootPath . 'storage/cache/casting')
->setDebug($debug);
$stack->addHttp()
->setRoutes([$rootPath . 'routes/web.php'])
->withFormRequests();
Рецепт — 10. Casting і DTO. Каталог — Bricks і addX(). Extension — Casting.