Skip to content

Instantly share code, notes, and snippets.

@pimdh
Created April 24, 2012 10:33
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save pimdh/2478668 to your computer and use it in GitHub Desktop.
Save pimdh/2478668 to your computer and use it in GitHub Desktop.
Functional PHP Framework
<?php
function route($pattern, $controller)
{
return function($query) use($pattern, $controller) {
return (($matches = route_match($pattern, $query)) === false) ?
false :
function($registry) use($matches, $controller) {
return $controller($matches, $registry);
}
;
};
}
function route_match($pattern, $query)
{
$regex = preg_replace('#:([a-z]+)#', '(?P<$1>[^/]+)', $pattern);
return !preg_match('#^'.$regex.'$#', $query, $matches) ? false : $matches;
}
function app($routes, $query, $registry)
{
$controller = router($routes, $query);
return $controller ? $controller($registry) : 'HTTP 404';
}
function router($routes, $query)
{
return !count($routes) || !($route = $routes[0]) ? false :
((($controller = $route($query)) === false) ?
router(array_slice($routes, 1), $query) :
$controller
);
}
function view($file, $params)
{
extract($params);
ob_start();
include $file;
return ob_get_clean();
}
/*
Usage:
echo app(
array(
route('/hi/:name', function($params) {
return 'Hi '.$params['name'];
})
), '/hi/Pim', array());
Be sure to set up your .htaccess file correctly
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment