Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problemik w kontolerze
Forum PHP.pl > Forum > PHP
qbejs
Witam,

Mam sobie oto taki kod prostego kontrolera jak widać poniżej. Opisywać chyba nie muszę bo jest b. prosty. Problem pojawia sie w przetwarzaniu parametrów. Dane dostaje z $_GET , kiedy podam mu akcję, wszsystko jest okej. Jednak gdy nie jest podana dostaję komunikat : ) in C:\xampp\htdocs\mvc\MainController.php on line 30">Call to undefined method test:sad.gif) in C:\xampp\htdocs\mvc\MainController.php on line 30

Co do budowy reszty klas. W pliku o nazwie odpowiadajacej nazwie modulu, znajdziemy klase tak samo zatytulowana.W niej zawarte są metody odpowiadajace nazwami akcją ( obrabiaja dane, w mojej klasie Test są metody default ktory jest wywolywana w przypadku braku podanej akcji oraz helloWorld, obie zwracaja returnem rozne stringi. ). Jest tez klasa odpowiadajaca za prezentacje ( nazewnictwo wg. konwencji nazwamoduluView ) ona dostane to co zwrocila metoda modulu i wyswietla wynik ( czyli w moim przypadku dostanie stringa zwrconego przez ktoras z metod klasy Test ).

Zapewne robię coś kompletnie ze złej strony, ponieważ wg. mnie od strony składni i zasad oop w php wyglada to okej.

  1. class MainController {
  2.  
  3. public function __construct($moduleClass, $action = null)
  4. {
  5. if (isset($moduleClass))
  6. {
  7. if (file_exists("modules/".$moduleClass.".php") && file_exists("modules/".$moduleClass."View.php"))
  8. {
  9. require_once("modules/".$moduleClass.".php");
  10. require_once("modules/".$moduleClass."View.php");
  11. if (class_exists($moduleClass))
  12. {
  13. $presenterClass = $moduleClass."View";
  14. $module = new $moduleClass;
  15. $presenter = new $presenterClass;
  16. if (isset($action))
  17. {
  18. $presenter->action = $action;
  19. $presenter->data = $module->$action(); // tu parser wskazuje error
  20. }
  21. else
  22. {
  23. $presenter->action = "defaultAction";
  24. $presenter->data = $module->defaultAction();
  25. }
  26.  
  27. $presenter->display();
  28. }
  29. else
  30. {
  31. die("Modul <b>".$moduleClass."</b> nie istnieje !");
  32. }
  33. }
  34. else
  35. {
  36. die("Nie można załadować modułu <b>".$moduleClass."</b> !");
  37. }
  38. }
  39. else
  40. {
  41. die("Nie podano modulu");
  42. }
  43. }
  44. }
jang
Cytat(qbejs @ 12.09.2010, 21:55:30 ) *


Drogi kolego, wciskasz nam tu jakiś kit winksmiley.jpg
Call to undefined method test:sad.gif) - wywołujesz niezdefiniowaną metodę test()
Jednym słowem przekazujesz do konstruktora string "test" jako drugi parametr. Gdyby było inaczej to sprawdź sobie poniższy kod:
  1. $action = null;
  2.  
  3. if(isset($action))
  4. {
  5. echo "Jest akcja";
  6. }
  7. else
  8. {
  9. echo "Nie ma akcji";
  10. }

Przeszukaj kod który masz powyżej miejsca gdzie tworzysz obiekt MainController. Na pewno masz tam : jeśli nie ma GET[] to $action = "test"
Tak przy okazji, jest też takie "cóś" -> method_exists
wiiir
wg mnie powinno byc jeszcze tak
  1. $module = new $moduleClass();
  2. $presenter = new $presenterClass();
marcio
Jesli chodzi o nawiasy to jesli konstruktor klasu nie potrzebuje zadnych arg. nawiasy nie sa wymuszone
qbejs
Problem rozwiązany, okazał się nim null przy wartosci $action w metodzie __construct.
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.