Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP Front Controller i Router
walus16
post 10.10.2014, 07:32:44
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 24.05.2011

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


Witam, napisałem właśnie do swojego frameworka Front Controller i Router. Chciałbym prosić was o opinię co mógł bym z optymalizować lub poprawić. Wiem, że człowiek nie jest nieomylny, dlatego wasze spostrzeżenia będą dla mnie bardzo cenne.

frontcontroller.php
  1. <?php defined('BASEPATH') OR exit('No direct script access allowed.');
  2.  
  3. require_once SYS_PATH . 'core/controller.php';
  4. require_once SYS_PATH . 'core/router.php';
  5.  
  6. class Bootstrap
  7. {
  8. public function init(Router $router)
  9. {
  10. $controller = $router->getController();
  11. $method = $router->getAction();
  12. $params = $router->getParams();
  13.  
  14. require_once APP_PATH . 'config/config.php';
  15.  
  16. $controller = $controller ? $controller : DEFAULT_CONTROLLER;
  17. $method = $method ? $method : DEFAULT_ACTION;
  18.  
  19. $path_controller = APP_PATH . 'controllers/' . $controller . '.php';
  20.  
  21. if (file_exists($path_controller)) {
  22. require_once $path_controller;
  23.  
  24. $controller = new $controller();
  25.  
  26. if (method_exists($controller, $method)) {
  27. return call_user_func(array($controller, $method), $params);
  28. }
  29. echo '404 not found - method';
  30. } else {
  31. echo '404 not found - controller';
  32. }
  33. }
  34. }


router.php
  1. <?php defined('BASEPATH') OR exit('No direct script access allowed.');
  2.  
  3. class Router
  4. {
  5. protected $controller;
  6. protected $action;
  7. protected $params;
  8.  
  9. public function __construct()
  10. {
  11. $path_info = !empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (!empty($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : '');
  12.  
  13. $path_info = array_filter(explode('/', $path_info));
  14. $origin = implode('/', $path_info);
  15.  
  16. require APP_PATH . 'config/routes.php';
  17.  
  18. foreach ($route as $key => $value) {
  19.  
  20. $key = str_replace(
  21. array(':any', ':num', ':nonum', ':alpha', ':alnum', ':hex'),
  22. array('[^/]+', '[0-9]+', '[^0-9]+', '[A-Za-z]+', '[A-Za-z0-9]+', '[A-Fa-f0-9]+'),
  23. $key
  24. );
  25.  
  26. if (preg_match('#^' . $key . '$#', $origin)) {
  27. $origin = preg_replace('#^' . $key . '$#', $value, $origin);
  28. }
  29. }
  30.  
  31. $parts = explode('/', $origin);
  32. $parts2 = array_filter($parts);
  33.  
  34. $this->controller = ($c = array_shift($parts)) ? $c : 'welcome';
  35. $this->action = ($c = array_shift($parts)) ? $c : 'index';
  36.  
  37. // Params
  38.  
  39. $this->params = (isset($parts2[2])) ? $parts2[2] : null;
  40.  
  41. //echo $this->getController() . ',' . $this->getAction() . ',' . $this->getParams() . '<br />';
  42.  
  43. }
  44.  
  45. public function getController()
  46. {
  47. return $this->controller;
  48. }
  49.  
  50. public function getAction()
  51. {
  52. return $this->action;
  53. }
  54.  
  55. public function getParams()
  56. {
  57. return $this->params;
  58. }
  59. }


Ten post edytował walus16 10.10.2014, 07:35:22
Go to the top of the page
+Quote Post
adbacz
post 10.10.2014, 12:43:37
Post #2





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


1. Niepotrzebne włożyłeś tyle kodu do Konstruktora klasy Router. To wszystko musi być zawarte w osobnej metodzie a ta osobna metoda wywołana dopiero przed pobraniem danych na temat kontrolera itp. Za dużo automagicznie poszedłeś.
2. Przydałaby się osobna klasa, któa odpowiedzialna będzie za wywoływanie metody kontrolera - teraz to jest za dużo w jednym miejscu rzeczy.
3. Osobna klasa do pokazywania błędów (brak metody, kontrolera) i wysyłaj nagłówki 404 bo Googlebot weźmie to za dobrze działającą stronę.

I tak ogólnie - znajdź sobie jakiś sposób na załadowywanie takich plików na config.php i routes.php, ponieważ takie ładowanie na stałe (na stałe wpisana ścieżka do pliku) jest niezbyt dobrym podejściem.
Go to the top of the page
+Quote Post
walus16
post 12.10.2014, 14:53:20
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 24.05.2011

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


Też właśnie myślałem, żeby robić konstruktor na metody.

Cytat(adbacz @ 10.10.2014, 13:43:37 ) *
I tak ogólnie - znajdź sobie jakiś sposób na załadowywanie takich plików na config.php i routes.php, ponieważ takie ładowanie na stałe (na stałe wpisana ścieżka do pliku) jest niezbyt dobrym podejściem.


Co masz na myśli?
Go to the top of the page
+Quote Post
irekk
post 12.10.2014, 15:56:56
Post #4





Grupa: Zarejestrowani
Postów: 64
Pomógł: 10
Dołączył: 2.08.2012
Skąd: DW

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


wygoogluj Autoloader PSR-0
Go to the top of the page
+Quote Post

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: 19.04.2024 - 02:30