Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nice url - co dalej ?
Forum PHP.pl > Forum > PHP
Szymciosek
Tak jak w temacie, chciałbym jakoś prosto rozwiązać sprawę nice url żeby z takiego linku:
www.xx.pl/gallery/show/12

wyciągnąć i odpalić po kolei:
kontroler: gallery
metoda: show
parametr: 12

do tej pory osiągnąłem takie coś:
  1. <?php
  2.  
  3. //include('config.php');
  4. include('application/SimpleUrl.class.php');
  5.  
  6. function classAutoloader($class)
  7. {
  8. include ('controllers/'.$class.'.controller.php');
  9. }
  10. spl_autoload_register('classAutoloader');
  11.  
  12. $url = new SimpleUrl('/labs/mvc3');
  13. $url_controller = $url->segment(1);
  14. $url_action = $url->segment(2);
  15. $url_param = $url->segment(3);
  16.  
  17. if ($url_controller)
  18. {
  19. $controller = new $url_controller;
  20.  
  21. if ($url_action && $url_param)
  22. {
  23. $controller->$url_action($url_param);
  24. }
  25. elseif ($url_action)
  26. {
  27. $controller->$url_action();
  28. }
  29. } else {
  30. $controller = new Home;
  31. }
  32.  
  33.  
  34.  
  35. ?>


oraz simpleUrl:
  1. <?php
  2.  
  3. class SimpleUrl
  4. {
  5. var $site_path;
  6.  
  7. public function __construct($site_path)
  8. {
  9. $this->site_path = $this->removeSlash($site_path);
  10. }
  11.  
  12. public function __toString()
  13. {
  14. return $this->site_path;
  15. }
  16.  
  17. private function removeSlash($string)
  18. {
  19. if ($string[strlen($string) - 1] == '/')
  20. {
  21. $string = rtrim($string, '/');
  22. }
  23.  
  24. return $string;
  25. }
  26.  
  27. public function segment($segment)
  28. {
  29. $url = str_replace($this->site_path, '', $_SERVER['REQUEST_URI']);
  30. $url = explode('/', $url);
  31. if (isset($url[$segment]))
  32. {
  33. return $url[$segment];
  34. } else {
  35. return false;
  36. }
  37. }
  38. }
  39.  
  40. ?>


Teraz to działa, ale tylko jeśli plik nazywa się Home.controller.php, a ja chciałbym zrobić tak:

$controller = new HomeController;

żeby ta część ładowała mi plik Home.controller.php

a w linku wyświetlało się www.xx.pl/home

da się to zrobić ?
irmidjusz
Pewnie, że się da. Jest już zrobione w mnóstwie gotowych frameworków. Wygoogluj np. "php framework routing".
Szymciosek
O tym to ja dobrze wiem, ale szukam bardziej gotowych źródeł, sam już szukałem co nieco, jedno nie działa za bardzo, a inne znowu jest tak namieszane, że nie da się po ludzku tego pojąć...
Mephistofeles
Chcesz gotowca?
https://github.com/symfony/Routing
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.