Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [klasa php5] Router - przyjazne URLe
essey
post
Post #1





Grupa: Zarejestrowani
Postów: 118
Pomógł: 5
Dołączył: 9.07.2003
Skąd: Wołów/Wrocław

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


  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. ?>


Ten post edytował essEy 29.01.2006, 00:03:41
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


http://forum.php.pl/index.php?showtopic=29867
ja cos takiego dawno temu napisalem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Twoja wersja to troche czytelniejsza moja z parametrem glue (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
essey
post
Post #3





Grupa: Zarejestrowani
Postów: 118
Pomógł: 5
Dołączył: 9.07.2003
Skąd: Wołów/Wrocław

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


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.
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


masz racje, mi tez jak go dzis zobaczylem nie przypadł (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
itsme
post
Post #5





Grupa: Zarząd
Postów: 1 512
Pomógł: 2
Dołączył: 22.04.2002
Skąd: Koszalin




prosty, uniwersalny ... do zastosowanie ... podoba mi sie
Go to the top of the page
+Quote Post
dragonfly
post
Post #6





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 2.01.2006
Skąd: Londyn / UK

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


Nie podoba mi sie stosowane przez ciebie nazewnictwo metod, zmiennych etc. ale sama klasa "daje rade".
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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.
Go to the top of the page
+Quote Post
dragonfly
post
Post #8





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 2.01.2006
Skąd: Londyn / UK

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


@dr_bonzo: O tym wlasnie mowilem :]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 18:19