Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP]
Forum PHP.pl > Forum > PHP > Frameworki
kacperix
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
nrm
zrob to jako komponent i zaladuj w app_cont.
kacperix
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.
korki
moznaby wrzucic ta funkcje do app_model i wtedy masz $this->query()
wojtek.zielinski
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. ?>
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.