c
This commit is contained in:
@@ -32,12 +32,13 @@ class AppAdmin
|
||||
|
||||
|
||||
protected function getRouter() {
|
||||
$route = [
|
||||
/*$route = [
|
||||
"module" => (isset($_REQUEST['module'])) ? $_REQUEST['module'] : 'home',
|
||||
"view" => (isset($_REQUEST['view'])) ? $_REQUEST['view'] : 'home',
|
||||
];
|
||||
];*/
|
||||
|
||||
$this->current_route_info = $route;
|
||||
$objRouter = new Router();
|
||||
$this->current_route_info = $objRouter->getRouting();
|
||||
}
|
||||
|
||||
|
||||
|
||||
60
inc/Hura8/Router.php
Normal file
60
inc/Hura8/Router.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace Hura8;
|
||||
|
||||
|
||||
class Router {
|
||||
|
||||
private $path_config = [];
|
||||
|
||||
public function __construct() {
|
||||
//if( ! $this->path_config) {
|
||||
//$path_config_file = APP_DIR . '/config/routing.php';
|
||||
//$this->path_config = require $path_config_file;
|
||||
//}
|
||||
}
|
||||
|
||||
// url: admin/abc/product.php?para1=value1
|
||||
public function getRouting() {
|
||||
$parsed = Url::parse($_SERVER['REQUEST_URI']); //abc/product?param1=12¶m2=value2
|
||||
|
||||
// home
|
||||
if($parsed['path'] == '/') {
|
||||
return [
|
||||
'module' => preg_replace("/[^a-z0-9_\-]/i","", getRequest('module', 'home')),
|
||||
'view' => preg_replace("/[^a-z0-9_\-]/i","", getRequest('view', 'home')),
|
||||
'view_id' => 0,
|
||||
'query' => $parsed['query'],
|
||||
];
|
||||
}
|
||||
|
||||
// check match pattern in $this->path_config
|
||||
foreach ($this->path_config as $_config => $_route ) {
|
||||
if(preg_match("{^".$_config."$}", $parsed['path'], $match )) {
|
||||
|
||||
if(isset($_route['query']) && is_array($_route['query'])) {
|
||||
$_route['query'] = array_merge($_route['query'], $parsed['query']);
|
||||
}else{
|
||||
$_route['query'] = $parsed['query'];
|
||||
}
|
||||
|
||||
return array_merge([
|
||||
'path' => $parsed['path'],
|
||||
'match' => $match,
|
||||
], $_route);
|
||||
}
|
||||
}
|
||||
|
||||
// auto parse path base on convention: admin/module/view/view_id
|
||||
$ele = explode("/", $parsed['path']);
|
||||
|
||||
// else error
|
||||
return [
|
||||
'module' => $ele[2] ?? 'home',
|
||||
'view' => isset($ele[3]) ? preg_replace("/[^a-z0-9_\-]/i","", $ele[3] ) : 'home',
|
||||
'view_id' => isset($ele[4]) ? preg_replace("/[^a-z0-9_]/i","", $ele[4] ) : '',
|
||||
'query' => $parsed['query'],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
47
inc/Hura8/Url.php
Normal file
47
inc/Hura8/Url.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace Hura8;
|
||||
|
||||
class Url
|
||||
{
|
||||
|
||||
public static function parse($url) {
|
||||
$data = parse_url($url);
|
||||
$default = [
|
||||
'scheme' => '',
|
||||
'host' => '',
|
||||
'port' => '',
|
||||
'user' => '',
|
||||
'pass' => '',
|
||||
'path' => '',
|
||||
'query' => [],
|
||||
'fragment' => '',
|
||||
];
|
||||
foreach ($data as $key => $value) {
|
||||
if(isset($default[$key])) {
|
||||
$default[$key] = ($key == 'query') ? self::parsedQuery($value) : $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $default;
|
||||
}
|
||||
|
||||
|
||||
public static function parsedQuery($query = '') {
|
||||
if(!$query) return [];
|
||||
$result = [];
|
||||
$parts = explode("&", $query);
|
||||
|
||||
foreach ($parts as $part) {
|
||||
$el = explode("=", $part);
|
||||
if(sizeof($el) != 2) continue;
|
||||
|
||||
$cleaned_key = preg_replace("/[^a-z0-9_\-\.]/i", '', $el[0]);
|
||||
$cleaned_value = preg_replace("/[^a-z0-9_\.\-;&]/i", '', $el[1]);
|
||||
|
||||
$result[$cleaned_key] = $cleaned_value;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user