Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ocena skryptu.
-arrtxp-
post
Post #1





Goście







Witam, czytając o MVC, stworzyłem własne rozwiązanie i chciałbym abyście oceni mój kod, gdzie mniej więcej przedstawiam system działania:

// struktura najważniejszych plików
  1. /a-control // folder gdzie mamy klasy
  2. + klasy
  3. /mod-view // folder z plikami html
  4. + pliki z html
  5.  
  6. index.php


index.php

  1. <?php
  2. header('Content-type: text/html;charset=utf-8');
  3. date_default_timezone_set('Europe/Warsaw');
  4.  
  5. include('./a-control/aStart.php'); // klasa, która waliduję mi dane (np: aStart::spr_int($dane);) i w niej ustawiam połączenie z bazą.
  6. include('./a-control/aLoadClass.php'); // jak sama nazwa mówi
  7.  
  8. // ustawienia loadera class
  9. $firstLoader = new ClassLoader('i', './a-control/');
  10. $firstLoader->register();
  11.  
  12. // generowanie strony
  13. if(empty($_GET['v'])) { $_GET['v'] = 'start'; }
  14. $u = iPage::loadClass($_GET['v']); // wywołanie odpowiedniej kasy
  15. $u->view();
  16. ?>


iPage.php // ustala to co ma być wyświetlone
  1. <?php
  2. abstract class iPage
  3. {
  4. public static $_page = 'start';
  5. public $fd_www = '/www/'; // folder z strona
  6. public static $db_key = 'baza'; // baza danych - prefix
  7. public $_msg = '';
  8.  
  9. // wyczytywanie odpowiedniej klasy
  10. public static function loadClass($page)
  11. {
  12. self::$_page = aStart::spr_txt($page);
  13. $i_class = array(
  14. 'index' => 'iView_Index',
  15. );
  16.  
  17. if(!empty($i_class[self::$_page]))
  18. {
  19. return new $i_class[self::$_page];
  20. }
  21. else
  22. {
  23. return new iStart;
  24. }
  25. }
  26.  
  27. // generowanie strony
  28. public function view()
  29. {
  30. $file = $this->fd_www.'/mod-view/'.self::$_page.'.php';
  31. if(file_exists($file))
  32. {
  33. include($file);
  34. }
  35. else
  36. {
  37. self::$_page = 'error';
  38. include($this->fd_www.'/mod-view/error.php');
  39. }
  40. }
  41. // koniec
  42. }
  43. ?>


a-control/iView_Index.php
  1. <?php
  2. class iStart extends iPage
  3. {
  4. public function __construct() {
  5. // tutaj sobie sprawdzam co ma być wywołane, np:
  6. if(isset($_GET['zaloguj'])) { $this->zaloguj(); }
  7. }
  8. public function zaloguj()
  9. {
  10. // zapytanie do bazy, czy coś w tym stylu
  11. }
  12. public function dom()
  13. {
  14. return 'Ale Twoja chata to ruina.';
  15. }
  16. }
  17. ?>


mod-view/index.php - widok

  1. <html>
  2. <head>
  3. <title>Dom</tilte>
  4. <//head>
  5. <body>
  6. <?php echo $this->dom(); ?>
  7. </body>
  8. </html>


Teraz chciałbym dowiedzieć się czy takie rozwiązanie jest złe. Jakie stwarza problemy takie rozwiązanie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Daimos
post
Post #2





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


1. Gdzie przekazujesz zmienne do widoku? Bo chyba o tym zapomniałeś.
2. Jak przekażesz z kontrolera np. tytuł strony do szablonu?
3. Jedna z metod Twojego kontrolera zwraca string, dlaczego, po co?
4. MVC, gdzie model? (IMG:style_emoticons/default/smile.gif)
5.
Cytat
/a-control // folder gdzie mamy klasy
nie klasy tylko klasy kontrolera, bo w katalogu np. a-model będziesz trzymał też "klasy", ale chodzi o modele.
6.
Cytat
  1. $i_class = array(
  2. 'index' => 'iView_Index',
  3. );
  4.  
  5. if(!empty($i_class[self::$_page]))
  6. {
  7. return new $i_class[self::$_page];
  8. }

Czyli patrząc na to, każdy kontroler musisz zapisać tutaj w tablicy. Inaczej go nie uruchomisz. Po co w każdym kontrolerze, ładować pełną listę, np. 50-100 kontrolerów ?
Ustal nazewnictwo plików, a następnie sprawdzaj, czy kontroler istnieje jako plik. Później sprawdź czy jest tam wywoływana klasa / metoda. Do tego musisz napisać jakąś "klasę", która zajmie się wszystkim. Nie rób wszystkiego w KAŻDYM kontrolerze.

Ten post edytował Daimos 29.11.2014, 16:40:19
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: 8.10.2025 - 16:02