Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Routing we wlasnym MVC
brzoza91
post 13.01.2013, 17:22:15
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 9.05.2012

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


Witam
Chciałbym stworzyć routing, do własnej implementacji MVC. Na początku przedstawię strukturę katalogów mojego projektu.

W folderze app, będą pliki danego projektu. Każdy contoller będzie miał swój plik .yml w którym będą zapisane zasady routingu.

przykładowy plik index.yml
prefiks oznacza wpisany adres url, contoller i action wiadomo.

  1. index:
  2. prefix: /index/index/
  3. controller: Index
  4. action: index
  5.  
  6. show:
  7. prefix: /index/show/
  8. controller: Index
  9. action: show
  10.  
  11. add:
  12. prefix: /index/add/
  13. controller: Index
  14. action: add


i tak działa mój routing:
1. ktoś wpisuje adres na mojej stronie np. index/show/40
2. sprawdzane jest czy istnieje dany controller o nazwie index, akcja show i parametr 40
3. jesli tak to uruchamiany jest odpowiednia akcja z contollera

Routing.php
  1. class Routing
  2. {
  3. private $action;
  4. private $controller;
  5. private $parameter;
  6. private $routingFile;
  7. private $path=array();
  8.  
  9. function __construct()
  10. {
  11. $this->createPath();
  12. $this->loadRoutingFile($this->path['contoller']);
  13. $path = $this->searchRouting($this->path['contoller'] . '/' . $this->path['action'], $this->
  14. routingFile);
  15.  
  16. $this->setAction($path);
  17. $this->setContoller($path);
  18. }
  19.  
  20. private function searchRouting($search, $array)
  21. {
  22. $array = (object)($array);
  23. $search = trim($search, '/');
  24.  
  25. foreach ($array as $routing) {
  26. $r = trim($routing['prefix'], '/');
  27. if ($r == $search) {
  28. return $routing;
  29. }
  30. }
  31. header('Location: index.php');
  32. return false;
  33. }
  34.  
  35. private function loadRoutingFile($name)
  36. {
  37. require_once ('/libs/yaml/Yaml.php');
  38. if (isset($name)) {
  39. $this->routingFile = Yaml::parse('c:/wamp/www/framework/app/routing/' . $name .
  40. '.yml');
  41. } else {
  42. $this->routingFile = Yaml::parse('c:/wamp/www/framework/app/routing/index.yml');
  43. }
  44. }
  45.  
  46. private function createPath()
  47. {
  48. $url = explode('/', trim($_GET['url'], '/'));
  49.  
  50. if (!isset($url[0])) {
  51. $url[0] = 'index';
  52. }
  53. if ($url[0] == "") {
  54. $url[0] = 'index';
  55. }
  56.  
  57. if (!isset($url[1])) {
  58. $url[1] = 'index';
  59. }
  60. if ($url[1] == "") {
  61. $url[1] = 'index';
  62. }
  63.  
  64. if(isset($url[2]) && filter_var($url[2],FILTER_SANITIZE_NUMBER_INT,FILTER_VALIDATE_INT)){
  65. $this->parameter=$url[2];
  66. }
  67. $this->path['contoller'] = $url[0];
  68. $this->path['action']= $url[1];
  69. }
  70.  
  71. public function getAction()
  72. {
  73. return $this->action;
  74. }
  75.  
  76. public function getContoller()
  77. {
  78. return $this->controller;
  79. }
  80.  
  81. public function getParameter()
  82. {
  83. return $this->parameter;
  84. }
  85.  
  86. public function setAction($path)
  87. {
  88. $this->action = $path['action'];
  89. }
  90.  
  91. public function setContoller($path)
  92. {
  93. $this->controller = $path['controller'];
  94. }
  95.  
  96.  
  97. }

Bootstrap.php
  1. require_once 'core/Routing.php';
  2. class Bootstrap
  3. {
  4. public function __construct(){
  5. $routing=new Routing();
  6.  
  7. require_once('/app/controllers/'.$routing->getContoller().'Controller.php');
  8. $contoller=$routing->getContoller().'Controller';
  9. $action=$routing->getAction().'Action';
  10.  
  11. $page=new $contoller();
  12. $page->$action($routing->getParameter());
  13. }
  14.  
  15. }



Chciałbym aby mój kod był uniwersalny i był elastyczny dla wielu różnych projektów. Chciałbym też aby został napisany o dobre praktyki OOP. Głównie to właśnie zależy mi na wysokiej jakości kodu. Co myślicie o takim rozwiązaniu tego zagadnienia? Wszystko działa w tym routingu. Jednak bardzo mi zależy aby pisać przemyślany kod. Gdzie popełniłem jakiś błąd projektując ten routing ?
Go to the top of the page
+Quote Post

Posty w temacie
- brzoza91   Routing we wlasnym MVC   13.01.2013, 17:22:15
- - r4xz   kilka uwag, jeśli chcesz własny, a jednak przemyśl...   13.01.2013, 17:43:05
|- - brzoza91   Cytat(r4xz @ 13.01.2013, 17:43:05 ) u...   13.01.2013, 18:03:55
- - !*!   Zapisz ścieżkę do aplikacji w jakiejś stałej, poni...   13.01.2013, 18:09:22
- - brzoza91   okej, tą ścieżkę i autoloader miałem w planach w...   13.01.2013, 18:14:20
|- - r4xz   Cytat(brzoza91 @ 13.01.2013, 18:14:20...   13.01.2013, 19:03:08
- - brzoza91   tworząc każdy nowy projekt będę tworzył nowe pliki...   13.01.2013, 21:07:54
- - !*!   Poczytaj o standardach PSR-0/1/2 tam masz wyjaśnio...   13.01.2013, 21:10:54
- - brzoza91   okej, poczytam. ale gdy użyje takich przestrzeni ...   13.01.2013, 21:20:05
- - !*!   Ponieważ oprócz NS musisz napisać autoloader(napis...   13.01.2013, 21:23:25
- - brzoza91   a gdzie byście umieścili obiekt klasy PDO ? w klas...   14.01.2013, 00:26:01
|- - !*!   Cytat(brzoza91 @ 14.01.2013, 00:26:01...   14.01.2013, 10:29:02
|- - brzoza91   Cytat(brzoza91 @ 14.01.2013, 00:26:01...   16.01.2013, 14:44:35
|- - markonix   Cytat(brzoza91 @ 16.01.2013, 14:44:35...   16.01.2013, 14:50:08
|- - brzoza91   Cytat(markonix @ 16.01.2013, 14:50:08...   16.01.2013, 15:17:45
- - !*!   @up przeczytaj raz jeszcze mój ostatni post i to c...   17.01.2013, 10:21:36
|- - brzoza91   Cytat(!*! @ 17.01.2013, 10:21...   17.01.2013, 12:25:33
- - markonix   Utwórz nową metodę która pobierze "wszystkich...   17.01.2013, 14:07:43
- - sazian   wiem że pewnie teraz zostanę zbesztany ale co tam ...   17.01.2013, 23:34:40
|- - hind   Cytat(sazian @ 17.01.2013, 23:34:40 )...   18.01.2013, 08:18:12
- - !*!   sazian - tylko że w Twoim wypadku to już nie jest ...   18.01.2013, 11:48:04
- - brzoza91   no dobrze teraz wiem, że musi być w modelu obsługa...   18.01.2013, 14:28:57
- - !*!   Odpowiedź już padła, zakładając że masz dobry rout...   18.01.2013, 14:50:00


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: 14.08.2025 - 10:40