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);
}
}
?>
/**
* 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();
$a->setGlue('/');
$a->parseURL();
$array = $a->getArray();