Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [klasa] Router, PHP 5
Sokal
post 1.05.2007, 20:53:21
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 8.02.2007

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
devnul
post 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


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
Sokal
post 1.05.2007, 22:11:17
Post #3





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 8.02.2007

Ostrzeżenie: (10%)
X----


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ć winksmiley.jpg
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ę biggrin.gif

Ten post edytował Sokal 1.05.2007, 23:53:43


--------------------
Jabber/E-Mail: dominiksokal[at]gmail.com | GG: #3795571
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: 24.10.2020 - 15:35