Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Powiązania między modelami w różnych modułach
Forum PHP.pl > Forum > Gotowe rozwiązania
MarcinTryka
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.
karmer
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.
MarcinTryka
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ć
  1. <?php
  2. $model_object= new ModelClass();
  3. ?>

metodą
  1. <?php
  2. $model_object=$this->register_object_model('ModelClass')
  3. ?>
,
gdzie register_object_model wyglądałoby mniej więcej tak:

  1. <?php
  2. public function register_object_model($model_class){
  3.  Zend_Loader::loadClass($model_class);
  4.  $object_Model=new $model_class();
  5.  $model_class->addRef($this->getModelRef($model_class));
  6.  $model_class->addDep($this->getModelDep($model_class));
  7. }
  8. ?>

I to świetnie by działało gdybym tylko ja tworzył te modele. Ale obawiam się że przy pobieraniu
  1. <?php
  2. $object_model->findDependentRowset()
  3. ?>

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ć? smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.