// config/routes.php
return array(
'^/$' => array('controller' => 'index', 'action' => 'default'),
'^/articles/(?<article_id>\d+)/$' => array('controller' => 'articles', 'action' => 'default'),
'^/articles/(?<article_id>\d+)/edit/$' => array('controller' => 'articles', 'action' => 'edit'),
);
// lib/router.php
function getRoute($uri = null) {
static $routes;
if (!isset($routes)) $routes = include DIR . '/config/routes.php';
if (!$uri) $uri = strtok($_SERVER['REQUEST_URI'], '?');
foreach ($routes as $uriRegexp => $routeCfg) {
if (preg_match('#' . $uriRegexp . '#', $uri, $matches) {
$routeCfg['args'] = $matches;
return $routeCfg;
}
}
return null;
}
function getRoute404() {
return array('controller' => 'error', 'action' => '404', 'args' => array());
}
// index.php
define('DIR', __DIR__);
include DIR . '/lib/router.php';
$route = getRoute();
if (!$route) {
$route = getRoute404();
}
require_once DIR . '/controllers/' . $route['controller'] . '.php';
call_user_func('controller_' . $route['controller'] . '_' . $route['action'], $route['args']);
// controllers/index.php
function controller_index_default() {
echo "Hello! I am Index Page!";
}
// controllers/articles.php
function controller_articles_default($args) {
$articleId = $args['article_id'];
echo "Viewing article #$articleId";
}
function controller_articles_edit($args) {
$articleId = $args['article_id'];
echo "Editing article #$articleId";
}
// controllers/error.php
function controller_error_404() {
header('HTTP/1.0 404 Not Found');
echo "404";
}