Podpora PHP 8.1 enumeration v Latte a Presenterech
- m.brecher
- Generous Backer | 889
Ahoj,
PHP 8.1 přinesla enumeration které nabízejí typovou kontrolu nad parametry, kde potřebujeme několik konkrétních hodnot. Kupříkladu mám formulář, kde ve 3 po sobě jdoucích krocích provádím nějaké akce. Stav formuláře chci řídit parametrem akce v presenteru, který bude mít přesně tři string hodnoty.
Rád bych použil enum v parametrech akce stejně jako se dnes používá integer parametr $id, který Nette správně přetypuje na string do url (v odkazech) a zase zpět přetypuje na int (v metodě akce v presenteru, nebo parametrech s atributem #[Parameter] a #[Persistent]).
Zkusil jsem využít backed enum:
Narazil jsem na tyto výjimky:
Po ručním zadání do url: localhost/project/ledger/create?step=selectBook Nette automaticky nepřetypuje string na enum:
Použití enum v odkazech v Latte dopadlo podobně:
Latte vyhodí výjimku když narazí v odkaze na enum hodnotu:
Závěr: PHP enum není v Nette jako parametr odkazu podporován. Podpora enum typu je ale zajímavá nová feature, která by přinesla vyšší preciznost a snížila riziko chyb.
Jaký máte názor, využili by jste podporu enumu v Latte a presenterech ?
Editoval m.brecher (8. 1. 2024 16:01)
- m.brecher
- Generous Backer | 889
@nightfish
Tak určitě.
tak super !
Smyslem enumu je zpřehlednit kód, a snížit riziko chyb. To že jde enum použít přes boilerplate to vím, ale smysl má použít jednoduchý čitelný zápis, protože boilerplate kód znepřehledňuje a naopak si myslím, že funkční, ale nečitelný zápis enumu je víc náchylný na chybu než použití normálního stringu.
- Pavel Kravčík
- Člen | 1201
Boiler plate je v pohodě. Škoda, že to nejde bez něj. Včera jsem na to koukal, ale asi by to potřebovalo větší zásah.