![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 31.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Buduję aplikacje modułową. Podstawowym wymogim jest prędkość instalacji, wprowadzania zmian. Chciałbym aby podpięcie nowego modułu nie trwało dłużej niż skopiowanie folderu + odpalenie skryptu instalacyjnego. I teraz załóżmy że moduł ma być powiązany z już istniejącym. Jak załatwić sprawę referencji między tabelami? Czy mam odpuscić referencje, czy da się to jakoś rozwiązać?
-- EDIT-- Czy może jeśli instaluje nowy moduł to powinienem parsować model i dodawać do pliku z obietem już istniejacego modelu linijkę tekstu, czy może kazdy model w metodzie init powinien sprawdzać czy nie ma jakichś dodatkowych referencji? Zrobić jakąś jedną tablicę w bazie w której będzie sprawdzał czy ma jakieś dodatowe referencje i dodawał do tablicy? trochę boje się takich operacji ze względu na wydajność, bo to ma byc masówka i im więcej da się tego odpalić na jednym serwerze tym wieksze będą z tego zyski. Ten post edytował MarcinTryka 19.11.2008, 14:01:24 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 2 Dołączył: 3.09.2008 Skąd: Kętrzyn Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Ja to rozwiązałem w taki sposób: W obiekcie actioncontrollera uruchamiam obiekt, który nazwałem objectController. Obiekt ten odczytuje z katalogu moich modułów klasy modułów i tworzy ich instancję. Zapisuje je w swoim prywatnym atrybucie (tablica) 'modules'. Obiekt objectController przekazuje siebie ($this) do każdego modułu jaki stworzy. W każdym module mam wtedy możliwość wywołania jakiejkolwiek metody dowolnego modułu utworzonego przez objectControllera. Wywołanie metody wygląda w praktyce mniej więcej tak: $wynik_metody = $objectController->get('nazwa_modulu')->metodaModulu(); Sprawdzone i działa. Pozdrawiam. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 31.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem to trochę inaczej. Utworzyłem obiekt RelacjeModulow który sprowadza się właściwie do tabeli. Na początku przy rejestracji modułów pobierane są zapisane w nich dodatkowe relacje.
do tego napisałem klase dziedziczącą po Zend_Db_Table, oraz dodałem do niej konstruktor (w którym wywołałem oczywiście na początku parent::init()) Następnie konstruktor ten ma pobierać zależności i dodawać do obiektu (którego jest konstruktorem). Pojawił się jednak jeden problem związany z dotarciem do tych danych z Modelu. Czy jestem w stanie z modelu dobrać się do zmiennej zapisanej w Kontrolerze akcji? Ładnie da się to zrobić w Helper-ach akcji, bo jest metoda $this->getActionController (czy jakoś tak) i mam dostęp do tych zmiennych. Teoretycznie mógłbym zastąpić
metodą , gdzie register_object_model wyglądałoby mniej więcej tak:
I to świetnie by działało gdybym tylko ja tworzył te modele. Ale obawiam się że przy pobieraniu
ZF sam tworzy sobie klasy bezpośrednio, tzn uzywając domyslnego adaptera, więc nie dodałby już tych referencji. Z tego powodu chciałbym aby w konstruktorze tego domyslnego adaptera pobierać referencje. Tak żeby pobierać te dane od środka przy tworzeniu obiektu, a nie wywoływać i dodawać te referencje z zewnątrz (z akcji). Jak to zrobić? ![]() Ten post edytował MarcinTryka 27.11.2008, 10:24:53 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.06.2025 - 23:54 |