Router: Tip na podporu Backed enumerations

Bulldog
Člen | 110
+
+4
-

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)