[klasa] Router, PHP 5 |
[klasa] Router, PHP 5 |
1.05.2007, 20:53:21
Post
#1
|
|
Grupa: Zarejestrowani Postów: 237 Pomógł: 1 Dołączył: 8.02.2007 Ostrzeżenie: (10%) |
Cześć,
Jako, że pracuję nad czymś co ma przypominać prosty framework (lol) napisalem klase do obsługi URL Kod <?php /** * Klasa Router - Przyjazne URLe * * Klasa pobierająca informacje ze zmiennej $_SERVER['PATH_INFO'] i zamieniająca ją na tablicę * * @author Dominik Sokal * @version 1.3 2007/05/02 */ class Router { /** * Pole $_path_info * * Pole do przechowywania $_SERVER['PATH_INFO'] * * @access private * @var string */ private $_path_info; /** * Pole $_parameters * * Pole do przechowywania sparsowanego $_SERVER['PATH_INFO'] * * @access private * @var array */ private $_parameters = array(); /** * Pole $_glue * * Pole do przechowywania elementów łączących * * @access private * @var array */ private $_glue; /** * Metoda __construct() * * Ustawianie pola $_path_info * * @access public * @param string Ewentualne przyjmowanie $_SERVER['PATH_INFO'] */ public function __construct($path_info=false) { if($path_info === false) $this->_path_info = $_SERVER['PATH_INFO']; else $this->_path_info = $path_info; } /** * Metoda _cleanArray() * * Oczyszczanie tablicy ze zbędnych elementów * * @access private * @param array Tablica z możliwymi pustymi elementami * @return array Oczyszczona tablica */ private function _cleanArray($array) { foreach($array as $value) { if($value != '') $varray[] = $value; } return $varray; } /** * Metoda _splitString() * * Rozdzielanie stringu do tablicy * * @access private * @param string * @return array */ private function _splitString($string) { return $this->_cleanArray(explode($this->_glue, $string)); } /** * Metoda setGlue() * * Pobieranie stringu z elementem łączącym * * @access public * @param string */ public function setGlue($string) { $this->_glue = $string; } /** * Metoda parseURL() * * Konwertowanie zmiennej $_SERVER['PATH_INFO'] do tablicy * * @access public */ public function parseURL() { $this->_parameters = $this->_splitString($this->_path_info); } /** * Metoda getArray() * * Metoda do pobierania tablicy z parametrami * * @access public * @return array Tablica z parametrami */ public function getArray() { return $this->_parameters; } /** * Metoda getParameter * * Pobieranie parametru z tablicy z parametrami * * @access public * @param string Klucz do tablicy z parametrami (indeksowanej numerycznie) * @return string Pobieranie elementu tablicy jeżeli istnieje * @return null */ public function getParameter($id) { return (isset($this->_parameters[$id]) ? $this->_parameters[$id] : null); } } ?> Przykład użycia: Kod $a = new Router();
$a->setGlue('/'); $a->parseURL(); $array = $a->getArray(); Ten post edytował Sokal 1.05.2007, 23:52:10 -------------------- Jabber/E-Mail: dominiksokal[at]gmail.com | GG: #3795571
|
|
|
1.05.2007, 22:05:57
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 470 Pomógł: 75 Dołączył: 21.09.2005 Skąd: że znowu Ostrzeżenie: (0%) |
imho masz cos nie tak z gluestring, bo po co definiować kilka różnych znaków zespalającyhc poszczególne poziomy skoro i tak nie wykorzystuje się tej funkcjonalności. Ja u siebie zrealizowałem to w ten sposób że moge zdefiniowac (podobnie jak u ciebie) wiele różnych elementów łączących/dzielących poszczególne parametry z tą jedną różnicą że jeśli zdefiniuje 2 elementy np / i ; to pierwszy rozdziela sekcje główne a drugi rozdziala subparametry czyli mając taki link:
/cos/cos2;test;test2/ otrzymam tablice wynikową w postaci Kod Array( [0]=> Array('cos') [1]=> Array('cos2','test','test2') } oczywiscie ilość parametrów jest dowolnie konfigurowalna. Co mi to daje a no np przy rozbiciu artykułów na strony robimy cos takiego /artykul/id_artykulu/print lub /artykul/id_artykulu;1/print - strona pierwsza /artykul/id_artykulu;2/print /artykul/id_artykulu;3/print - kolejne strony Z pozoru nic istotnego - ale moim zdaniem cholernie przydatne przy takich drobiazgach jak stronicwanie czy dodawanie jakichś opcjonalnych parametrów do linka -------------------- |
|
|
1.05.2007, 22:11:17
Post
#3
|
|
Grupa: Zarejestrowani Postów: 237 Pomógł: 1 Dołączył: 8.02.2007 Ostrzeżenie: (10%) |
Hmmm...
Ale jak ktoś sobie chce zrobić link, np. taki: index.php/cos/tam^albo:tak Tak żeby urozmaicić (lol) to to się może przydać Ale jeszcze pomyślę... //Już wszystko niby przemyślałem... Jest jeden łącznik, ale można użyć też w URLach innych separatorów, ale rozdzielenie to już na własną rękę Ten post edytował Sokal 1.05.2007, 23:53:43 -------------------- Jabber/E-Mail: dominiksokal[at]gmail.com | GG: #3795571
|
|
|
Wersja Lo-Fi | Aktualny czas: 18.04.2024 - 07:31 |