Zend Framework 3 umí skrze balíček zendframework/zend-hydrator převádět pole na objekty a opačně objekty na pole. Kromě toho umožňuje při extrakci objektu do pole (např. pro výstup API) filtrování !
Více o hydratoru píše např. blog na oficiálních stránkách projektu.
Příklady použití
Např. potřebujeme vytvořit objekt User (pro přihlášení uživatele), ale nechceme, aby při extrakci dat vracel heslo. Vytvoříme tzv. strategii (Zend\Hydrator\Strategy\StrategyInterface), kterou vložíme do hydratoru (Zend\Hydrator\ObjectProperty) a ta zařídí pro specifikované pole s názvem password např. převedení hesla na hash nebo převedení znaků na hvězdičky.
Dalším příkladem může být objekt, ve kterém načítáme z DB hodnoty, ale chceme je vracet pod jiným názvem. K tomu slouží několik vytvořených strategií.
Zend\Hydrator\NamingStrategy\UnderscoreNamingStrategy – převede názvy na malá písmena (např. isPublished -> is_published).
Zend\Hydrator\NamingStrategy\CompositeNamingStrategy – umí převést hodnoty na různé typy (lze do ní vložit UnderscoreNamingStrategy), složíte ostatní strategie do jedné
HydratingResultSet
Pro výstupy SQL dotazů z DB byl vytvořen HydratingResultSet, ten umí všechno. Je to flexibilnější ResultSet. Umožňuje vybrat strategii pro načtení hodnot. Vytvoříte prototyp objektu (nějakou class s private proměnnýma – název se musí shodovat s názvem pole v DB, vložíte ho (setObjectPrototype) do HydratingResultSetu a on se postará o načtení hodnot (initialize) do objektu.
current() – vrací naklonovaný objekt s vloženou hodnotou aktuálního řádku (pokud není nastavená strategie, vrací čisté hodnoty)
jinak se dá procházet přes foreach jako pole a vrací naklonovaný objekt