| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
URL-reititinempty 27.02.06 16:39 Mahdollistaa siistien url-parametrien käytön tyyliin index.php?hae/auto/lada
/* * Yksinkertainen mutta tehokas "url-reititin" (keksikää itse parempi nimitys), * ilman monimutkaisia ja hitaita regExp lauseita. * Tämä siis mahdollistaa siistien ja turvallisempien(käyttäjä ei näe minkä nimisiä parametreja sovellukselle välitetään) url-parametrien käytön. * Tyyliin: * http://www.palvelin.fi/index.php?nayta/paidat/eka * http://www.palvelin.fi/index.php?nayta/kengat/seuraava * http://www.palvelin.fi/index.php?nayta/lapaset/6 * http://www.palvelin.fi/index.php?kori/lisaa/6 * * Pitäisi olla suht helposti liitettävissä mihin tahansa(edes jotenkin järkevästi toteutettuun) sovellukseen. * Toimii varmaan myös PHP4:llä kunhan muuttaa nuo luokan private määreet var:ksi ja konstruktorin muotoon function QueryRouter($queryString = false) */ //Edit-bugikorjaus: Tyhjä reitti ei toiminut. class QueryRouter { private $routes = array (); private $query = null; function __construct($queryString = false) { if (!$queryString) $queryString = $_SERVER['QUERY_STRING']; $this->query = empty ($queryString) ? array () : explode('/', rtrim($queryString, '/ ')); } function route($route, $params = array ()) { $route = empty ($route) ? array () : explode('/', $route); if (($pcount = count($route)) != count($this->query)) { return false; } for ($i = 0; $i < $pcount; $i ++) { if (($pname = ltrim($route[$i], ':')) != $route[$i]) { $params[$pname] = $this->query[$i]; continue; } if ($this->query[$i] != $route[$i]) return false; } return $params; } function add($route, $params = array ()) { $this->routes[$route] = $params; } function connect() { foreach ($this->routes as $route => $params) { if ($result = $this->route($route, $params)) { return $result; } } return false; } } /********************** ESIMERKKI *************************/ $router = new QueryRouter(); $router->add('nayta/:kategoria/eka', array ('module' => 'haku', 'action' => 'hae', 'id' => '1')); $router->add('nayta/:kategoria/seuraava', array ('module' => 'haku', 'action' => 'hae', 'kriteeri' => 'next')); $router->add('nayta/:kategoria/:id', array ('module' => 'haku', 'action' => 'hae')); $router->add('kori/lisaa/:id', array ('module' => 'ostoskori', 'action' => 'lisaa')); $router->add('kori/poista/:id', array ('module' => 'ostoskori', 'action' => 'poista')); $router->add(':module/:action/:id'); $router->add(':module/:action'); $router->add(':module', array ('action' => 'default')); $router->add('', array ('module' => 'ostoskori', 'action' => 'default')); $_GET = $router->connect(); print_r($_GET); /* Esim. pyyntö www.palvelin.fi/index.php?nayta/rintaliivit/eka tulostaa: Array ( [module] => haku [action] => hae [id] => 1 [kategoria] => rintaliivit ) */ Akiro 17:22 27.2.06 index.php? pois välistä vielä mod_rewritellä niin on pop, käyttäjille huomautuksena siis, ei ollut arvostelua tätä vastaan ;) editoitu: 18:33 27.2.06 Ezku 18:31 27.2.06 Ja se taas tehdään .htaccessilla näin: Options FollowSymLinks Tuo myös sijoittaa pyydetyn osoitteen GET-muuttujaan path, jotta sitä ei tarvitse kaivella jostain $_SERVERin uumenista.RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?path=$1 [QSA,L] |
![]() Haku
|