Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework] Ładowanie modeli
spokz
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 1.01.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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.

Ten post edytował mortus 9.04.2010, 21:26:32
Go to the top of the page
+Quote Post
spokz
post
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 1.01.2007

Ostrzeżenie: (0%)
-----


Działa, super :-)

Listing 1 i 2 wystarczył, dzięki.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 01:42