<?php
require_once 'app/core/routeconfig.php' ;
require_once 'app/core/route.php' ;
$route = new Route( $routes ) ;
$route -> Run ( ) ;
?>
<?php
class Route{
public $any = '([A-Za-z]+)' ;
private $num = '([0-9]+)' ;
public $controller ;
public $action ;
public $params = array ( ) ; public $routes ;
public function __construct( $routes ) {
$this -> routes = $routes ;
}
function getUrl( ) {
return rtrim ( $_SERVER [ 'REQUEST_URI' ] , '/' ) ;
}
function getRoute( ) {
$i = 0 ;
foreach ( $this -> routes as $route ) {
$pattern = $route [ 'pattern' ] ;
//get uri
$uri = $this -> getUrl ( ) ;
$this -> controller = $route [ 'path' ] [ 'controller' ] ;
$this -> action = $route [ 'path' ] [ 'action' ] ;
if ( ! empty ( $route [ $i ] [ 'path' ] [ 'params' ] ) ) { foreach ( $route [ $i ] [ 'path' ] [ 'params' ] as $param => $value ) {
$params = array ( $param => $value ) ; }
}
break ;
} $i ++;
}
return array ( $this -> controller , $this -> action ) ; }
public function Run( ) {
$route = $this -> getRoute ( ) ;
$controller = $route [ 0 ] ;
$action_name = 'Action_' . $route [ 1 ] ;
$controller_name = $this -> connectionFile ( $controller ) ;
$controller = new $controller_name ;
$controller -> $action_name ( ) ;
}
function connectionFile( $controller ) {
$this -> controller = $controller ;
$controller_name = 'Controller_' . $controller ;
$controller_file = strtolower ( $controller_name ) . '.php' ; $model_name = 'Model_' . $controller ;
include 'app/controllers/' . $controller_file ;
} else {
}
include 'app/models/' . $model_file ;
}
return $controller_name ;
}
}
PD9waHAKCiAJcmVxdWlyZV9vbmNlICdhcHAvY29yZS9yb3V0ZWNvbmZpZy5waHAnOwogICAgcmVxdWlyZV9vbmNlICdhcHAvY29yZS9yb3V0ZS5waHAnOwoKICAgICRyb3V0ZSA9IG5ldyBSb3V0ZSgkcm91dGVzKTsKICAgICRyb3V0ZSAtPiBSdW4oKTsKPz4KCjw/cGhwIAoKY2xhc3MgUm91dGV7CgogICAgcHVibGljICRhbnkgPSAnKFtBLVphLXpdKyknOwogICAgcHJpdmF0ZSAkbnVtID0gJyhbMC05XSspJzsKICAgIHB1YmxpYyAkY29udHJvbGxlcjsKICAgIHB1YmxpYyAkYWN0aW9uOwogICAgcHVibGljICRwYXJhbXMgPSBhcnJheSgpOwogICAgcHVibGljICRyb3V0ZXM7CiAgICAKICAgIAogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyb3V0ZXMpIHsKICAgIAkkdGhpcy0+cm91dGVzID0gJHJvdXRlczsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRVcmwoKXsKCiAgICAgICAgcmV0dXJuIHJ0cmltKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddLCAnLycpOwoKICAgIH0KICAgIAogICAgZnVuY3Rpb24gZ2V0Um91dGUoKXsKICAgICAgICAkaSA9IDA7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5yb3V0ZXMgYXMgJHJvdXRlKXsKCiAgICAgICAgICAgICRwYXR0ZXJuID0gJHJvdXRlWydwYXR0ZXJuJ107CiAgICAgICAgICAgICRwYXR0ZXJuID0gc3RyX3JlcGxhY2UoJzphbnknLCAkdGhpcy0+YW55LCAkcGF0dGVybik7CiAgICAgICAgICAgICRwYXR0ZXJuID0gc3RyX3JlcGxhY2UoJzpudW0nLCAkdGhpcy0+bnVtLCAkcGF0dGVybik7CgogICAgICAgICAgICAvL2dldCB1cmkKICAgICAgICAgICAgJHVyaSA9ICR0aGlzLT5nZXRVcmwoKTsKCiAgICAgICAgICAgIGlmKHByZWdfbWF0Y2goJyNeJy4kcGF0dGVybi4nJCMnLCAkdXJpKSl7CgogICAgICAgICAgICAgICAgJHRoaXMtPmNvbnRyb2xsZXIgPSAkcm91dGVbJ3BhdGgnXVsnY29udHJvbGxlciddOwogICAgICAgICAgICAgICAgJHRoaXMtPmFjdGlvbiA9ICRyb3V0ZVsncGF0aCddWydhY3Rpb24nXTsKICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkcm91dGVbJGldWydwYXRoJ11bJ3BhcmFtcyddKSl7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHJvdXRlWyRpXVsncGF0aCddWydwYXJhbXMnXSBhcyAkcGFyYW0gPT4gJHZhbHVlKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zID0gYXJyYXkoJHBhcmFtID0+ICR2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgfSAkaSsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXkoJHRoaXMtPmNvbnRyb2xsZXIsICR0aGlzLT5hY3Rpb24pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBSdW4oKXsKICAgICAgICAkcm91dGUgPSAkdGhpcy0+Z2V0Um91dGUoKTsKICAgICAgICAkY29udHJvbGxlciA9ICRyb3V0ZVswXTsKICAgICAgICAkYWN0aW9uX25hbWUgPSAnQWN0aW9uXycuJHJvdXRlWzFdOwogICAgICAgICRjb250cm9sbGVyX25hbWUgPSAkdGhpcy0+Y29ubmVjdGlvbkZpbGUoJGNvbnRyb2xsZXIpOwoKICAgICAgICAkY29udHJvbGxlciA9IG5ldyAkY29udHJvbGxlcl9uYW1lOwogICAgICAgICRjb250cm9sbGVyIC0+ICRhY3Rpb25fbmFtZSgpOyAKICAgIH0KCiAgICBmdW5jdGlvbiBjb25uZWN0aW9uRmlsZSgkY29udHJvbGxlcil7CgogICAgICAgICR0aGlzLT5jb250cm9sbGVyID0gJGNvbnRyb2xsZXI7CgogICAgICAgICRjb250cm9sbGVyX25hbWUgPSAnQ29udHJvbGxlcl8nLiRjb250cm9sbGVyOwogICAgICAgICRjb250cm9sbGVyX2ZpbGUgPSBzdHJ0b2xvd2VyKCRjb250cm9sbGVyX25hbWUpLicucGhwJzsKICAgICAgICAkbW9kZWxfbmFtZSA9ICdNb2RlbF8nLiRjb250cm9sbGVyOwogICAgICAgICRtb2RlbF9maWxlID0gc3RydG9sb3dlcigkbW9kZWxfbmFtZSkuJy5waHAnOwoKICAgICAgICBpZihmaWxlX2V4aXN0cygnYXBwL2NvbnRyb2xsZXJzLycuJGNvbnRyb2xsZXJfZmlsZSkpewogICAgICAgICAgICBpbmNsdWRlICdhcHAvY29udHJvbGxlcnMvJy4kY29udHJvbGxlcl9maWxlOwogICAgICAgIH1lbHNlewoKICAgICAgICB9CgogICAgICAgIGlmKGZpbGVfZXhpc3RzKCdhcHAvbW9kZWxzLycuJG1vZGVsX2ZpbGUpKXsKICAgICAgICAgICAgaW5jbHVkZSAnYXBwL21vZGVscy8nLiRtb2RlbF9maWxlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjb250cm9sbGVyX25hbWU7Cgl9Cn0=