Router: Tip na podporu Backed enumerations
- Bulldog
- Člen | 110
Zdravím.
Před chvílí jsem to zkoušel na nejnovějším Nette a moc to
nezafungovalo.
Takže mám nápad na vychytávku, kdy by mohl router podporovat Backed
enumerations z PHP
Enum:
enum OrderDirection: string
{
case ASC: 'ASC';
case DESC: 'DESC';
}
Zpracování například signálu:
public function handleOrderBy(string $column, OrderDirection $direction): void
{
// Zpracování... Zde jsem si jistý, co bude v $direction
}
Odkaz třeba v Latte:
<a n:href="orderBy!, column: 'name', direction: \OrderDirection::ASC">Řadit podle jména vzestupně</a>
Vzhledem k tomu, že se jedná o Enum, tak se to dá krásně rozlišit od
scalar hodnot a pole pomocí
OrderDirection::ASC instanceof \UnitEnum
, získat skalár z enumu
OrderDirection::ASC->value
, zjistit, ze kterého enumu
proměnná je OrderDirection::ASC::class
(to je tu asi zbytečné,
když se toto bude zjišťovat přes reflexi endpointovské funkce) a taky
z hodnoty z URL je možné zpětně namapovat na daný enum
OrderDirection::tryFrom('ASC')
, což i ověří, jestli parametr
v URL spadá do ENUMu a když ne, tak 404.
Co myslíte? Na implementaci jen tak pro sebe to dám, ale rád bych takovou srandu viděl už rovnou ve frameworku.
EDIT:
Samozřejmě by to mělo fungovat i v rámci persistentních parametrů…
#[Persistent]
public OrderDirection $orderDirection;
Editoval Bulldog (28. 8. 2022 0:52)