Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problemik w kontolerze
qbejs
post 12.09.2010, 20:55:30
Post #1





Grupa: Zarejestrowani
Postów: 48
Pomógł: 1
Dołączył: 9.02.2006

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


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. }
Go to the top of the page
+Quote Post
jang
post 12.09.2010, 22:10:50
Post #2





Grupa: Zarejestrowani
Postów: 101
Pomógł: 11
Dołączył: 2.02.2005

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


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


--------------------
$email = filter_var(filter_var($email, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
if($email === false) {
// Houston, we have a problem....
}
Go to the top of the page
+Quote Post
wiiir
post 13.09.2010, 07:29:53
Post #3





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


wg mnie powinno byc jeszcze tak
  1. $module = new $moduleClass();
  2. $presenter = new $presenterClass();
Go to the top of the page
+Quote Post
marcio
post 13.09.2010, 08:07:03
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Jesli chodzi o nawiasy to jesli konstruktor klasu nie potrzebuje zadnych arg. nawiasy nie sa wymuszone


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
qbejs
post 13.09.2010, 11:30:12
Post #5





Grupa: Zarejestrowani
Postów: 48
Pomógł: 1
Dołączył: 9.02.2006

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


Problem rozwiązany, okazał się nim null przy wartosci $action w metodzie __construct.
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 Wersja Lo-Fi Aktualny czas: 20.07.2025 - 10:35