Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Ładowanie modeli
Forum PHP.pl > Forum > PHP > Frameworki
spokz
Witam.

Mam taką zagwostkę. Mam kontroler "centralny", który dziedziczy po Zend_Controller_Action i ma dodatkowo funkcję loadModel działającą poprawnie. W tej samej klasie umieściłem także:

  1. // Load models
  2. $this->loadModel('Categories');
  3. $this->loadModel('Products');
  4.  
  5. // Assign models to variables
  6. $categories = new Categories();
  7. $products = new Products();


W innych kontrolerach, które dziedziczą po tym kontrolerze "centralnym" nie mogę jednak wykorzystać tych modeli. Używam ich następująco:

  1. // Select all products from tables
  2. $select = $products->select();
  3. $select->from(array(...


i dostaję błąd:

  1. Notice: Undefined variable: products in \app\controllers\IndexController.php on line 27
  2. Fatal error: Call to a member function select() on a non-object in \app\controllers\IndexController.php on line 27


Proszę o pomoc lub wyjaśnienie co robię źle.
mortus
Chyba powinno to być zrobione w taki sposób.
  1. // Assign models to variables
  2. $this->categories = new Categories();
  3. $this->products = new Products();
  1. // Select all products from tables
  2. $select = $this->products->select();
  3. $select->from(array(...
Chodzi o to, że zmienne $products i $categories są u Ciebie zadeklarowane tylko lokalnie, w jakiejś funkcji (konstruktorze, albo innej metodzie klasy). Aby przypisać je do samej klasy należy użyć właśnie wyrażenia $this->. Jeśli to nie pomoże, to być może trzeba będzie stworzyć w klasie centralnej pola
  1. class Klasa_Centralna {
  2. $categories = null;
  3. $products = null;
  4. public function __construct() {
  5. // ładujemy modele za pomocą loadModels()
  6. $this->categories = new Categories();
  7. $this->products = new Products();
  8. }
  9. }
Choć chyba nie jest to konieczne, bo przecież php tworzy zmienne dynamicznie. Później wykorzystujemy je już w taki sposób, jak w listingu 2.
spokz
Działa, super :-)

Listing 1 i 2 wystarczył, dzięki.
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-2025 Invision Power Services, Inc.