Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wzorzec MVC, pobieranie danego kontrollera (klasy)
Forum PHP.pl > Forum > PHP
Luneth
Witam, otóż zainteresowałem się wzorcem MVC w PHP, a dokładniej tymi przykładami: 1 oraz 2.
Mam pytanie, w jaki sposób zabezpieczyć możliwość stworzenia egzemplarza np PDO lub innej wcześniej zadeklarowanej, gdy użytkownik wpisze w adresie PDO etc?
marcio
Jesli cie dobrze zrozumialem to poprzem routing wczytujesz tylko kontrolery modulow a nie wszystko :]
Luneth
Owszem, ale wcześniej mam request_once'em załadowane dwa pliki z dwoma klasami, klasy parsującej adres oraz klasę która ustanawia połączenie z mySQL używając PDO. A to przecież działa tak: metoda zwraca nazwę kontrolera do linijki: $moduł = new $router->getKontroler(); , a getKontroler() polega na znalezieniu jedynie wartości odp zmiennej i zwróceniu jej. Więc jak user wpisze sobie PDO czy Database (ta moja klasa) to się utworzy egzemplarz danej klasy. A funkcję __autoload mam zdefiniowaną tak, że się faktycznie ładują tylko pliki z określonego folderu smile.gif
marcio
Troche zamotales i ja nie rozumiem albo zle zaprojektowales aplikacje snitch.gif

Pokaz jakis krotki kod:)
Luneth
Kod index.php (proszę o lekkie potraktowanie, nie jest jakiś szczególnie wykończony, to eksperymentalne pisanie kodu jak na razie winksmiley.jpg)

  1. <?php
  2.  
  3. $sitePath = realpath(dirname(__FILE__));
  4.  
  5.  
  6. require_once($sitePath.'/Core/Database.php');
  7. require_once($sitePath.'/Core/MainController.php');
  8.  
  9. function __autoload($className) {
  10. $fileName = $className.'.controller.php';
  11. if(file_exists('controllers/'.$fileName))
  12. {
  13. require_once('controllers/'.$fileName);
  14. if(!class_exists($className,0)) throw new Exception('Podany plik nie zawiera klasy '.$className);
  15. }
  16. else throw new Exception('Nie odnaleziono pliku zawierającego klasę '.$className);
  17. }
  18.  
  19. try
  20. {
  21. $mainController = new Controller();
  22. $controller = $mainController->getController();
  23. $action = $mainController->getAction();
  24. $controller = new $controller($action);
  25. }
  26. catch(Exception $e)
  27. {
  28. echo $e->getMessage();
  29. }
  30.  
  31. ?>


Ten MainController.php zawiera klasę Controller, która działa u mnie jak klasa router w przykładach które podałem.

EDIT: Ok, do metody kontrolera dodałem sprawdzanie czy plik o podanej nazwie istnieje w folderze Controllers smile.gif Dzieki za chęci.
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.