Właśnie zacząłem konfigurować nową aplikację ZF2 dla nowego projektu, opartego na szkielecie ZF2, i patrzę na ich samouczek na temat Models.Modele ZF2 udostępnione między modułami
tl; dr: jak powinienem udostępnić model między wieloma różnymi modułami, umieszczając go gdzieś na wyższym poziomie (na zewnątrz/moduł)?
Mamy kilka modułów setup tak:
/
/module/ModuleName
/module/ModuleName/config
/module/ModuleName/src
/module/ModuleName/src/ModuleName
Właśnie miałem do konfiguracji folderu /module/ModuleName/src/ModuleName/Model/TableName.php
, ale potem zdałem sobie sprawę: że tabela będzie musiała być dostępne w innych modułach, jak również. Więc co powinienem zrobić?
Czy powinienem umieścić folder Modeli w /module/Model
, czy też spowoduje to, że będzie traktowany jako moduł, np. Site.com/model (w oparciu o naszą obecną konfigurację).
Czy należy kopiować i wklejać modele między miejscami? Czy powinienem umieścić gdzieś modele w /vendor/library/Company/Model
? Nie jestem pewien, czy jest na to najlepsza praktyka!
Pytanie 2: Samouczek sugeruje również użycie ServiceManager do utworzenia instancji modeli baz danych do korzystania z tej samej instancji. Co się stanie, jeśli mam moduł z 5 kontrolerami, a każdy kontroler uzyskuje dostęp do całkowicie oddzielnych tabel (powiedzmy po 4 tabele)? Wydaje mi się, że redundantnie zainicjowałoby 16 tabel przy każdym ładowaniu strony (dla innych kontrolerów w tym module). Inicjalizacja jednej tabeli powoduje dodanie 55ms do strony pageload. Czy jest jakiś sposób obejścia tego? Nie jestem pewien, jak przenieść konfigurację do działań kontrolera w oparciu o to, co samouczek ma zainicjować tablegateway?
Wielkie dzięki za odpowiedź Andrew! Masz rację: # 2, wygląda na to, że patrzyłem na niewłaściwą rzecz w Wincachegrind. Dobre wieści! Widziałem "UserMapper" wiele w kilku samouczków - czy to tylko przykład, czy jest to rzeczywiste ZF2 rzeczy? W odniesieniu do nr 1: więc jeśli zarejestruję funkcję 'Manufacturing \ Model \ WorkflowTable '=> ($ sm) {..}', czy będę mógł po prostu zadzwonić '$ this-> getServiceLocator() -> get() "Manufacturing \ Model \ WorkflowTable") "w dowolnej innej bibliotece? Czy standardową praktyką byłoby posiadanie modułu podstawowego z naszymi modelami? – Benno
Tak, to jest pomysł, możesz wywołać go w dowolnym module, wszystkie Service Manager Configs są łączone ze sobą, dzięki czemu możesz uzyskać wszystko ze wszystkich modułów – Andrew
UserMapper to tylko przykład, którego użyłem, jest to typowy scenariusz dla ludzi do korzystania z programu odwzorowującego DataMapper wzorzec – Andrew