Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kontroler, akcje ale trochę inaczej.
Joachim Peters
post
Post #1





Grupa: Zarejestrowani
Postów: 196
Pomógł: 2
Dołączył: 1.03.2006

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


Witam,

Ostatnio trochę czytałem na temat MVC i tak naprawdę tylko niektóre rzeczy z tego mi się podobają, nie wiem może jeszcze nie dostrzegam za wielu plusów, ale chce zastosować u siebie coś podobnego. Napisałem sobie klasę router i request, pierwsza pobiera dane z adresu, druga z formularzy, cookies, sesji i obsługuje dane z routera, klasę FrontController, które uruchamia moduł i tworzy instancję i klasę Action, uruchamia akcję (wywołuje metodę klasy).
Kodowo wygląda to mniej więcej tak:
  1. <?php
  2.  
  3. class FrontController {
  4.  public $module;
  5.  public $action;
  6.  public $objectAction;
  7.  
  8. public $request;
  9.  
  10. public function __construct(HttpRequest $request) {
  11. $this->request = $request;
  12.  
  13. $this->module = strtolower($this->request->get('get', 0));
  14. $this->action = strtolower($this->request->get('get', 1));
  15.  
  16. $this->runModule();
  17. }
  18.  
  19. public function runModule() {
  20. if(file_exists('./modules/user/'.$this->module.'.php')) {
  21. include_once('./modules/user/'.basename($this->module.'.php'));
  22.  
  23. $module = ucfirst($this->module);
  24.  
  25. $this->objectAction = new $module();
  26. } else {
  27. throw new Exception('Nie można znaleźć plików modułu');
  28. }
  29. }
  30. }
  31.  
  32. class Action {
  33.  private $controller;
  34.  
  35.  public function __construct(FrontController $controller) {
  36. $this->controller = $controller;
  37.  
  38. $this->runAction();
  39. }
  40.  
  41. public function runAction() {
  42. if(!is_null($this->controller->objectAction)) {
  43.  $action = $this->controller->action;
  44.  
  45. $this->controller->objectAction->$action();
  46. } else {
  47. throw new Exception('Brak akcji');
  48. }
  49. }
  50. }
  51.  
  52. $controller = new FrontController($request);
  53. $action = new Action($controller);
  54.  
  55. ?>

Jak powiecie czy to rozwiązanie jest optymalne, warto to dalej kodować, czy lepiej zabrać się za kodowanie 'standardowe' - z wprowadzaniem argumentów do funkcji itd.?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Joachim Peters
post
Post #2





Grupa: Zarejestrowani
Postów: 196
Pomógł: 2
Dołączył: 1.03.2006

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


c.d 2. Nadal nie za bardzo rozumiem, załóżmy, że mają wyrzucić się dwa wyjątki - puste, skąd mam wiedzieć co wtedy jest nie tak? Czy chodzi Ci o to, żebym dawał tyle klas wyjątków ile jest ich wystąpień, czyli do każdego zdarzenia inny wyjątek (z inną nazwą)?
c.d 3. Ok, mniej więcej wiem jakby to miało wyglądać tylko co jeżeli dana akcja będzie posiadała wiele widoków? Czy będzie trzeba składować cały kod widoku tej akcji w jednym pliku i później będzie od wczytywany podczas uruchamiania akcji ($view->get()) ?

Ten post edytował Joachim Peters 31.08.2007, 18:29:55
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 12:48