Witam,

Próbuję zrozumieć w jaki sposób budować aplikacje zgodnie z wzorcem MVC. Wszelkie działania na danych mam porozmieszczane w różnych klasach odpowiedzialnych za różne rzeczy. Korzystam z szablonów Smarty. Postanowiłem się pobawić i spróbować zbudować kontroler. No to zacząłem pisać:

  1. <?
  2.  
  3. class Kontroler {
  4.  
  5. protected $get;
  6. protected $tpl;
  7.  
  8. function __construct(array $get) {
  9.  
  10. $this->get = $get;
  11.  
  12. $this->tpl = new Smarty;
  13. $this->tpl->template_dir = '../templates/';
  14. $this->tpl->compile_dir = '../templates_c/';
  15.  
  16. $this->$get['modul']();
  17.  
  18. }
  19.  
  20. private function nowosci() {
  21.  
  22. switch ($this->get['akcja']) {
  23.  
  24. case 'wyswietl':
  25. if(!empty($this->get['id'])) {
  26. $news = new News($this->get['id']);
  27. $pobrane = $news->pobierzNews();
  28.  
  29. $tpl -> assign('pobrane', $pobrane);
  30. $tpl -> display('admin-newsy-wyswietl.tpl');
  31. }
  32. else {
  33. $newsy = new Newsy();
  34. $pobrane = $newsy->pobierzNewsy($this->get['strona'], self::ILENASTRONE, $this->get['sortby']);
  35.  
  36. $tpl -> assign('pobrane', $pobrane);
  37. $tpl -> display('admin-newsy.tpl');
  38. }
  39. break;
  40.  
  41. case 'dodaj':
  42. $tpl -> display('admin-newsy-dodaj.tpl');
  43. break;
  44.  
  45. case 'edytuj':
  46. $tpl -> display('admin-newsy-edytuj.tpl');
  47. break;
  48.  
  49. case 'usun':
  50. $news = new News($this->get['id']);
  51. if($news->usunNews()) { $msg = 'News usunięty poprawnie'; } else { $msg = 'Wystąpił jakiś problem przy usuwaniu newsa.'; }
  52.  
  53. $tpl -> assign('msg', $msg);
  54. $tpl -> display('admin-newsy.tpl');
  55. break;
  56.  
  57. default:
  58. $tpl -> display('admin-newsy.tpl');
  59. break;
  60.  
  61. }
  62.  
  63. }
  64. }



No i w tym momencie dosięgnęło mnie zwątpienie. Konkretnie w przypadku 'dodaj' i 'usuń'. Jeśli wartości 'moduł' i 'akcja' (np. nowosci -> dodaj) pochodzą z tablicy GET, wtedy oczekuję żeby aplikacja tylko i wyłącznie wyświetliła formularz dodawania (tak jak widać to na powyższym przykładzie). Co jeśli będę chciał wykonać samą akcję dodawania takiego newsa? Różnica będzie taka że dane te będę wysyłał w tablicy POST. Czy do tego typu działań powinienem stworzyć osobny kontroler? Osobne pliki wywoływane przez formularz? Pogubiłem się strasznie... Mam nadzieję że rozumiecie o co mi chodzi. wink.gif

Pozdrawiam i z góry dzięki za odpowiedź.