Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z odwołaniem się do funkcji klasy
Forum PHP.pl > Forum > PHP > Object-oriented programming
bor1904
Witam
Potrzebuję Waszej pomocy w sprawie odwoływania się do funkcji....


mam klasę MVC, która ładuje się zawsze na początku i ona odpowiada za załadowanie klasy danego kontrolera.

kontroler ma w konstruktorze

  1. {
  2. mvc::instance($this);
  3.  
  4.  
  5. $this->load = new MVC_Load;
  6.  
  7. }


klasa MVC_Load odpowiada za tworzenie instancji danej klasy modelu lub danej klasy biblioteki (biblioteka to u mnie tplugin np do obsługi URL itp)

  1. public function library($class_name,$alias=null,$filename=null)
  2. {
  3.  
  4. /* Gdy nie użyto aliasu */
  5. if(!isset($alias))
  6. $alias = $class_name;
  7.  
  8. if(empty($alias))
  9. trigger_error("Nazwa biblioteki nie może być pusta",E_USER_ERROR);
  10.  
  11. if(!preg_match('!^[a-zA-Z][a-zA-Z_]+$!',$alias))
  12. trigger_error("Nazwa biblioteki '{$alias}' ma nieprawidłową składnię !!!",E_USER_ERROR);
  13.  
  14. if(method_exists($this,$alias))
  15. trigger_error("Nazwa biblioteki '{$alias}' jest zarezerwowana !!!",E_USER_ERROR);
  16.  
  17. /* /* Czy biblioteka jest załadowana ? */
  18. if(isset($this->$alias))
  19. return true;
  20.  
  21. /* Gdy klasa nie istnieje */
  22. if(!class_exists($class_name))
  23. {
  24.  
  25.  
  26. if(!isset($filename))
  27. $filename = 'library.' . $class_name . '.php';
  28.  
  29. /* Sprawdz w myapps/myfiles/sysfiles plugins dirs */
  30. $filepath = MYAPPDIR . 'plugins' . DS . $filename;
  31. if(!file_exists($filepath))
  32. $filepath = BASEDIR . 'myfiles' . DS . 'plugins' . DS . $filename;
  33. if(!file_exists($filepath))
  34. $filepath = BASEDIR . 'sysfiles' . DS . 'plugins' . DS . $filename;
  35.  
  36. if(!file_exists($filepath))
  37. trigger_error("Nieznana biblioteka '{$class_name}'",E_USER_ERROR);
  38.  
  39. require_once($filepath);
  40.  
  41. if(!class_exists($class_name))
  42. trigger_error("Nieznana nazwa klasy '{$class_name}'",E_USER_ERROR);
  43.  
  44. }
  45.  
  46. /* pobranie instancji mvc */
  47. $mvc = mvc::instance();
  48.  
  49. $mvc->$alias = new $class_name;
  50.  
  51. return true;
  52.  
  53. }



W kontrolerze korzystać mogę w taki sposób:

//najpierw dodanie "referencji"

  1. $this->load->library('Url','url');
  2. $this->load->model('Sqlite_Model','sql');


//potem konkretne zabiegi (przykładowe)
  1. $val = $this->url->get(2);
  2. $result = $this->sql->query("SELECT * FROM services WHERE gr='av'");




Reasumując: index.php ładuje zawsze klase MVC, która wskazuje kontroler do załadowania, on ma w konstruktorze stworzenie instancji(jak wyżej), potem w kontrolerze do modeli i bibliotek odwołuje się "przez load" czego nie mogę zrobić z poziomu metody w modelu, a tam również potrzebuję dostepu do bibliotek...
(ten cały układ jest częściowo zgapiony z TinyMVC jeżeli to pomoże)


Jak korzystać z plug-inów (bibliotek) wewnątrz modelu questionmark.gif?
(jak się powinienem odwoływać ?)


Jeżeli potrzeba wglądu do jakiejś części kodu to chętnie udostepnie ...



Będę bardzo wdzięczny za szybkie naprowadzenie, bo dzis mam wolne ...

Pozdrawiam i z góry dziekuję

erix
Yhm, dlaczego trigger_error zamiast wyjątków?

Cytat
Jak korzystać z plug-inów (bibliotek) wewnątrz modelu ?

Jest chyba przyklejony wątek nt. systemów wtyczek.
zend
Ustaw statycznie w podstawowej klasie modelu instancje loadera
  1. Db_Model::setLoader(new Loader());
  2.  
  3. //potem
  4. protected $_loader;
  5. __construct()
  6. {
  7. $this -> _loader = self::getLoader();
  8. }
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.