Lokalizator jest interfejsem. Projektowanie Zend Framework 2 odbywa się za pomocą "design by contract", co oznacza, że polegasz na interfejsach, a nie na klasach. Menedżer jest domyślną implementacją Lokalizatora.
Wszystkie części oprócz jednego używają Lokalizatora. Jednak menedżer zapewnia więcej funkcji niż mówi interfejs. Zend\Mvc\Application
używa tych funkcji i dlatego opiera się na Menadżerze zamiast Lokalizatora.
Decyzja o użyciu lokalizatora w inicjalizatorach * Aware została wprowadzona zbyt późno, aby zwolnić wersję, dlatego też istnieje zarówno wersja ServiceLocatorAwareInterface
, jak i ServiceManagerAwareInterface
. Był już kod użytkownika przy użyciu inicjalizatora Menedżera, więc jest zachowywany dla kompatybilności wstecznej. Wewnętrznie wszystkie komponenty używają inicjatora lokalizatora. Jeśli musisz wybrać, wybierz Lokalizatora i odłóż Menedżera na ile to możliwe.
Jakiś czas temu również blogu o Locator i kierownik: https://juriansluiman.nl/article/120/using-zend-framework-service-managers-in-your-application
@Sam, Dlaczego potrzebujemy obu metod wtedy? – haim770
Ale dlaczego są dwa interfejsy. 'Zend \ ServiceManager \ ServiceManagerAwareInterface.php' i' Zend \ ServiceManager \ ServiceLocatorAwareInterface.php'. Jeśli SM jest implementacją SL, dlaczego mamy oddzielny interfejs. –