Před několika týdny jsme se zabývali přípravou na velké změny, které v ZF2 měly přijít. Jedná se zejména o separaci komponent a odstranění závislostí. Velikou změnou je sjednocení Services. Vznikl nový FactoryInterface pro factories, které již mají stejnou strukturu jako Invokables. Liší se samozřejmě tím, že Invokables služby jsou bez dependency injection. Což ovšem neznamená, že se do nich nedá injectnout až po vytvoření pomocí Initializers. FactoryInterface obsahuje metodu __invoke která nově přijímá Interop Container, za kterým se skrývá ServiceManager. Nic jako ServiceLocatorAwareInterface zde již neexistuje.

Včera vyšla 3.0 verze i pro Zend-Mvc, která již odstranila deprecated metody a závislosti. Velkou změnou je, že Controller je nyní bez ServiceManageru. ControllerManager, který se stará o tvorbu Controllerů, je v podstatě ServiceManager a je potřeba se k tomu takto chovat. Když si v nějaké nadřazené třídě přidáte __invoke, setServiceLocator a getServiceLocator tak jste tam, kde jste byli, a nebyla to žádná bolest. Pokud jste používali Controller jako invokable service, pak jim buď přidejte Initializer, nebo pro něj vytvořte factory s dependency injection.

V souvislosti s odstraněním některých závislostí byly separovány i některé pluginy. My jsme používali flashMessenger, který již není součástí Zend-Mvc. Byl separován do samostatného balíčku ZDE.

Také Zend-Router už není automaticky injectnutý a pokud jej chcete používat, musíte si jej zapnout. Verze 3.0 je myšlenkově založena na tom, že pokud chcete nějakou funkcionalitu injectnout, pak je ji potřeba zapnout jako modul.

<?php
return [
    'modules' => [
    	'Zend\Mvc\Plugin\FlashMessenger',
    	'Zend\Router',
    ],
],

nejsou to nijak bolestivé změny pro již zaběhnutou aplikaci. Jen je tam takový vtípek. Pokud jste používali Zend\Mvc\Translator, tak už jej nepoužívejte.. on tam totiž není také. Jen už bylo opomenuto vytvořit Translator, který by implementoval Zend\Validator\Translator\TranslatorInterface. Ten si nejspíš budete muset implementovat sami, pokud chcete překládat hlášky z validátorů.