Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [CakePHP], Metody Modeli w Kontrolerach
kacperix
post
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 30.07.2006
Skąd: okolice Elbląga

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


Witam wszystkich!

Otoż mój problem polega na tym, że w pliku app_controller.php chcę utworzyć funkcję, która będzie wykorzystawana w różnych miejscach strony. Wygląda ona następująco:

  1. <?php
  2. function getConfig($name) {
  3. $ret = $this->User->query("SELECT value FROM config WHERE name='".$name."'");
  4. $wynik = $ret[0]['config']['value'];
  5. return $wynik;
  6. }
  7. ?>


Chodzi tutaj głównie o linijkę, z zapytaniem do bazy danych: $ret = $this->User... Otóż to zapytanie działa tylko wtedy gdy korzystam z modelu User, a gdy np. chce tą funkcję wykorzystać, np. w modelu Koty to otrzymuję taki błąd:

Kod
Notice: Undefined property: AppController::$User in /...

Fatal error: Call to a member function query() on a non-object in /...


Nie mam pojęcia jak to zrobić aby to działało we wszystkich modelach. Proszę o pomoc!!

---
Pozdrawiam
Kacperix

Ten post edytował kacperix 3.09.2006, 11:41:34
Go to the top of the page
+Quote Post
nrm
post
Post #2





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


zrob to jako komponent i zaladuj w app_cont.


--------------------
Go to the top of the page
+Quote Post
kacperix
post
Post #3





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 30.07.2006
Skąd: okolice Elbląga

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


Witam!

No niestety nie podziałało to co polecił Normanos. Rozwiązałem problem w ten sposób:

Linijkę z poniższym kodem:

Kod
$ret = $this->User->query("SELECT value FROM config WHERE name='".$name."'");


Zmieniłem na linijkę:

Kod
$ret = $this->{$this->modelClass}->query("SELECT value FROM config WHERE name='".$name."'");


Jak narazie nie otrzymuję żadnych błedów dotyczących tej funkcji.

Dzięki i pozdrowienia dla wszystkich.
Go to the top of the page
+Quote Post
korki
post
Post #4





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 12.07.2006

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


moznaby wrzucic ta funkcje do app_model i wtedy masz $this->query()
Go to the top of the page
+Quote Post
wojtek.zielinski
post
Post #5





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 19.12.2006
Skąd: Poznań

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


Temat co prawda dość stary, ale jako, że sam zaczynam dopiero z cakePHP, to wiem, że często można właśnie ucząc się znaleźć przydatne informacje w dość starych postach. W związku z tym piszę tą odpowiedź.

Podane wyżej przez innych rozwiązania wydają mi się niezgodne z zamysłem autorów frameworka. Moim zdaniem, jeśli chcesz w innych kontrolerach wykorzystywać kod ściśle związany z Configiem, powinieneć w klasie ConfigController wstawić odpowiednią funkcję, np:
  1. <?php
  2. class ConfigConteroller extends AppController
  3. {
  4.  ...
  5.  
  6.  function getConfig($name)
  7.  {
  8. $ret = $this->Config->query("SELECT value FROM configs WHERE name='".$name."'");
  9. $wynik = $ret[0]['config']['value'];
  10. return $wynik;
  11.  }
  12.  
  13.  ...
  14. }
  15. ?>


a następnie wywoływać ją w innych kontrolerach za pomocą funkcji requestAction(), na przykład:

  1. <?php
  2. class InnyController extends AppController
  3. {
  4. ...
  5.  
  6.  function foo()
  7.  {
  8. ...
  9. $ret = $this->requestAction('/configs/getConfig');
  10. ...
  11.  }
  12.  
  13.  ...
  14. }
  15. ?>



Celowo nie zmieniałem w pierwszym bloku kodu funkcji, żeby wszystko było jasne, ale myślę, że funkcja powinna bardziej wykorzystywać elementy cakePHP, jak poniżej:

  1. <?php
  2. function getConfig($name)
  3. {
  4. $wynik = $this->Config->field("value", "name='".$name."'");
  5. return $wynik;
  6. }
  7. ?>


Ten post edytował wojtek.zielinski 12.12.2007, 00:06:04


--------------------
Wojtek Zieliński
http://www.zielinscy.pl
php portale cms
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 08:35