![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 518 Pomógł: 18 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Zaczynam dopiero przygode z zendem i przerabiajac tutorial o dodawaniu albumow plytowych do bazy nasunelo mi sie pytanie: 1) co to jest service manager, do czego można go używać, co można do niego dodawać (doczytalem ze factories mozna tu podpiac ale dlaczego ![]() 2) co to jest factory/factories (w tutorialach to ma cos wspolnego z konfigami ale nie jestem pewien) ![]() pytania o podstawy zenda2 zadawać tutaj czy w "przedszkolu" ? za cierpliwosc i zrozumienie dziekuje i pozdrawiam Grzegorz |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 97 Pomógł: 45 Dołączył: 5.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Service Manager jest oparty o wzorzec Service Locator i jest to mechanizm slużący do pobierania innych obiektów. Używa się go w module.config.php lub Module.php i składa się z 7 typów(kategorii).
1. abstract_factories pod tym kluczem definiuje się klasy, które muszą implementować ZendServiceManagerAbstractFactoryInterface. Rzadko używane. 2. aliases nadaje klasie alias, np:
Teraz jesteśmy w stanie się odwołać za pomocą
3. factories deklaruje klasy, które powinny implementować Zend/ServiceManager/FactoryInterface. Dość często używane. Np:
Jeżeli klasa ma konstruktor lub jeśli potrzebujemy dodać do klasy obiekty innej klasy to używamy do tego celu właśnie klucza factories. Obiekt jest inicjowany od razu- w momencie kiedy jest wczytywany do Service Managera. 4. invokables definiujemy klasy, które nie mają konstruktora lub jeśli nie musimy z niego(konstruktora) skorzystać. Również dość często używane, jak chociażby dla naszych klas kontrolera. Np:
Klasy pod tym kluczem są inicjowane dopiero w momencie odwołania się do danego klucza, a nie w momencie 'pobrania' przez ServiceManager 5. services służy głównie do deklarowania 'service'ów' lub klas, które są już zainicjowane. Np:
6. initializers nie miałem okazji jeszcze z tego korzystać. Ten klucz definiuje callback, który jest uruchamiany za każdym razem gdy jest tworzony obiekt, w ten sposób jeśli obiekt spełnia wymagania(np. implementuje konkretny interfejs) jeśtemy w stanie 'wstrzepić' inny obiekt.
7. shared domyślnie wszystkie service'y od ServiceManagera są 'shared', czyli pracujemy na tym samym obiekcie. Tutaj jesteśmy w stanie to zmienić, gdy np. chcemy żeby za każdym razem był tworzony nowy obiekt.
Gdy dodamy:
Jak napisałem na początku, Service Manager służy do łatwego dostępu do obiektów. Np. wyobraźmy sobie że tylko dla pewnej akcji chcesz dodać jakiś plik js, możesz to zrobić tak:
Tutaj za pomocą Service Managera dostajemy się do obiektu HeadScript i dzięki temu jesteśmy w stanie dodać plik js z poziomu akcji kontrolera Najczęśniej używane są factories i invokables. Co to są factories to napisałem wyżej, ale może dodam jeszcze jeden przykład żeby lepiej zobrazować co robi. Mamy klasę:
I załóżmy że chcemy wyświetlić w widoku to co zwraca metoda sayHello(). Możemy to zrobić na dwa sposoby. 1. Invokables W pliku Module.php dodajemy:
I teraz w akcji:
Najpierw dodajmy do ServiceManagera klasę HelloService, później w akcji pobieramy z Service Managera i odwołujemy się do metody sayHello(). Trochę to toporne i niewydajne. 2. Factories
I w akcji:
Tym sposobem dodajemy obiekt klasy HelloService do kontrolera w Service Managerze i teraz w akcji nie musimy pobierać tego obiektu, tylko bezpośrednio możemy na nim pracować. Bardziej czytelniejsze rozwiązanie, wydajne i zalecane. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 518 Pomógł: 18 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
RiE: dla Ciebie powini stworzyć przycisk "Bardzo pomógł"
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 60 Dołączył: 25.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
zgadzam się z elmozaurem
![]() -------------------- there is much to be learned
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:07 |