Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa php5] Router - przyjazne URLe
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
essey
  1. <?php
  2. /**
  3.  * Klasa umozliwiajaca wykozystywanie "przyjaznych urli"
  4.  * 
  5.  * dozwolone separatory
  6.  * /  .  ,  :  -  ^  *  "  '
  7.  * 
  8.  * 
  9.  * @version 0.1
  10.  * 
  11.  * @author Jonatan 'essEy' : essey(at)rcd.pl
  12.  */
  13. class Router
  14. {
  15. private $sUrl;
  16. // adres url pobrany z tablicy $_GET
  17.  
  18. private $aParams = array();
  19. // array z parametrami
  20.  
  21. private $sActionDefault;
  22. // domysla akcja
  23.  
  24.  
  25.  
  26. function __construct()
  27. {
  28. $this->sUrl = substr( $_SERVER['PATH_INFO'], 1 );
  29. }
  30.  
  31.  
  32. /**
  33.  * Ustala adres URL
  34.  *
  35.  * @param string $sUrl - opcionalnie
  36.  * @return string $this->sUrl
  37.  */
  38. function setUrl( $sUrl )
  39. {
  40. return $this->sUrl = $sUrl;
  41.  
  42. }
  43.  
  44. /**
  45.  * Ustala domysla akcje
  46.  *
  47.  * @param string $value
  48.  * @return string $this->sActionDefault
  49.  */
  50. function setActionDefault( $value )
  51. {
  52. return $this->sActionDefault = $value;
  53. }
  54.  
  55. /**
  56.  * Ustala string na array na podstawie serparatorow
  57.  */
  58. function convertUrl()
  59. {
  60. return ( $this->aParams = preg_split( '/[\/\.\,\:\-\^\*\"']/', $this->sUrl, -) );
  61. }
  62.  
  63. /**
  64.  * Ustala parametr z url o podanym id
  65.  *
  66.  * @param int $aId
  67.  * @return string param
  68.  */
  69. function getParam( $sId )
  70. {
  71. return ( isset( $this->aParams[ $sId ] ) ? $this->aParams[ $sId ] : '' );
  72. }
  73.  
  74. /**
  75.  * Ustala nazwe obecnej akcji
  76.  * Dla 0 = pierwsza pozycja
  77.  * Dla 1 = ostatnia pozycja
  78.  *
  79.  * @param int
  80.  * @return string nazwa akcji
  81.  */
  82. function getAction( $sId=)
  83. {
  84. if ( $sId == 1 )
  85. {
  86. return ( !empty( $this->aParams[0] ) ? end( $this->aParams ) : $this->sActionDefault );
  87. }
  88. else
  89. return ( !empty( $this->aParams[0] ) ? $this->aParams[0] : $this->sActionDefault );
  90. }
  91.  
  92. /**
  93.  * Ustala obecna domene
  94.  *
  95.  * @return string
  96.  */
  97. function getDomain()
  98. {
  99. return $_SERVER["HTTP_HOST"];
  100. }
  101.  
  102. /**
  103.  * Ustala oryginalny obecny adres url
  104.  *
  105.  * @param string URL
  106.  */
  107. function getUrl()
  108. {
  109. return $this->sUrl;
  110. }
  111.  
  112. /**
  113.  * Tworzy URL odpowiadajacy podanej akcji.
  114.  * 
  115.  * @param string $sName Nazwa akcji, ktora ma odpowiadac URLowi
  116.  * @return string URL
  117.  */
  118. function createUrl( $sName='' )
  119. {
  120. $tDirName = explode( '/', $_SERVER['SCRIPT_NAME'] );
  121. $tFileName = end( $tDirName );
  122.  
  123. return $tFileName .'/'. $sName;
  124. }
  125. }
  126. ?>


Klasa umożliwia korzystanie z wygodnych urli, czyli możliwość stosowania na stronie takich urli: index.php/test:pap,dalej.muminki^gumisie

W adresie mogą być wykorzystane następujące separatory: / . , : - ^ * " '


Wykorzystane:
  1. <?php
  2. $Router = new Router;
  3. # $Router ->setUrl( 'tutaj/mozna.podac:adres^url^ktorym*zajmie"sie-router' );
  4. $Router ->convertUrl();
  5. $Router ->setActionDefault( 'index' );
  6.  
  7. #przykladowe wykozystanie
  8. echo '<pre>';
  9. var_dump( $Router->getParam(1) ); // pobieramy parametr o id 1
  10. var_dump( $Router->getAction() ); // pobieramy nazwe akcji
  11. var_dump( $Router->getDomain() ); // pobieramy domene
  12. var_dump( $Router->getUrl() ); // pobieramy obecny url
  13. var_dump( $Router->createUrl('tes') ); // tworzymy url
  14. ?>
ActivePlayer
http://forum.php.pl/index.php?showtopic=29867
ja cos takiego dawno temu napisalem smile.gif Twoja wersja to troche czytelniejsza moja z parametrem glue smile.gif
essey
Tak, widziałem twój kod. Jednak nie przypadł mi on do gustu, dlatego postanowiłem napisać sam od zera i przy okazji podzielić się tym tutaj.
ActivePlayer
masz racje, mi tez jak go dzis zobaczylem nie przypadł smile.gif zastanawiam sie tylko czy wybranie domyślnej akcji ma lezec po stronie routera czy moze np gdzies w konfigach byc, i kontroler powinien decydowac co wtedy kiedy nie ma zadnej akcji wybranej. nawiasem mówiąc nie lubie setterów i getterów smile.gif
itsme
prosty, uniwersalny ... do zastosowanie ... podoba mi sie
dragonfly
Nie podoba mi sie stosowane przez ciebie nazewnictwo metod, zmiennych etc. ale sama klasa "daje rade".
dr_bonzo
uOT:
Cytat
Nie podoba mi sie stosowane przez ciebie nazewnictwo metod, zmiennych

Dla mnie sa bardzo dobre -- czytam je i wiem co robia (metody), przechowuja (zmienne), nie potrzebuje do tego 100 stronicowego manuala.
Jedynie moge sie przyczepic do kolejnosci slow w: "setActionDefault" (i this->sActionDefault), powinno byc "setDefaultAction" - choc po polsku to obie formy sa (chyba) prawidlowe.
dragonfly
@dr_bonzo: O tym wlasnie mowilem :]
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.