Il localizzatore è l'interfaccia. Il design di Zend Framework 2 viene eseguito con "design by contract", il che significa che ti affidi alle interfacce piuttosto che alle classi. Manager è un'implementazione predefinita del localizzatore.
Tutti tranne un componente utilizzano il localizzatore. Tuttavia, il gestore fornisce più funzionalità di quelle che dice l'interfaccia. Il Zend\Mvc\Application
utilizza queste funzioni e pertanto si affida al Manager anziché al localizzatore.
La decisione di utilizzare il localizzatore negli inizializzatori * Aware è stata presa troppo tardi per il rilascio, quindi questo è il motivo per cui vi è sia un ServiceLocatorAwareInterface
sia un ServiceManagerAwareInterface
. C'era già il codice userland che utilizzava l'inizializzatore di Manager, quindi è mantenuto per la compatibilità all'indietro. Internamente tutti i componenti utilizzano l'inizializzatore Locator. Se devi scegliere, scegli il Locator e lascia il Manager il più possibile a parte.
un po 'di tempo fa ho anche bloggato sul localizzatore e il Gestore: https://juriansluiman.nl/article/120/using-zend-framework-service-managers-in-your-application
fonte
2013-09-08 19:35:41
@ Sam, Perché abbiamo bisogno di entrambi i metodi, allora? – haim770
Ma perché ci sono due interfacce. 'Zend \ ServiceManager \ ServiceManagerAwareInterface.php' e' Zend \ ServiceManager \ ServiceLocatorAwareInterface.php'. Se SM è l'implementazione di SL, perché abbiamo un'interfaccia separata. –