我PHP创建我自己的MVC框架,以学习更高级的编程手段。 我已经得到了框架起来,但是运行我有一个关于当前路由方法的问题。 我希望框架支持后台CMS恭维前端网站。 问题是,我的路由结构的工作原理是这样- mywebsite.com/controller/method/id
路由引擎排序信息到一个这样的数组
segments 0 => controller, 1 => method, 2 => id
现在,如果我访问mywebsite.com/projects需要我什么,我已经建立了作为一个管理页面。 不仅我希望这是访问只能从mywebsite.com/admin/projects,我希望mywebsite.com/projects带我去前台。
所以,如果我想访问mywebsite.com/projects
我想它呈现“前”控制器,推“项目”入法。 如果我访问mywebsite.com/admin/projects
我想它加载的项目控制器。
下面是整个当前路由类,如下所示。
<?php
class Request {
//url domain.com/controller/method/other
//holds url segments 0 => controller, 1 => method, 2 => other, etc
public $segments;
function __construct() {
$this->parse_globals();
}
function parse_globals(){
//$uri = preg_replace("|/(.*)|", "\\1", str_replace("\\", "/", $_SERVER['REQUEST_URI']));
$uri = (empty($_GET['rt'])) ? '' : $_GET['rt'];
$this->segments = array_filter(explode('/', $uri));
if (in_array("admin", $this->segments)) {
array_shift($this->segments);
}
print_r($this->segments);
//remove index php
if( reset($this->segments) == 'index.php') {
array_shift ($this->segments);
}
}
function controller(){
return $this->segment(0);
}
function method(){
return $this->segment(1);
}
function param( $str ){
return isset($_REQUEST[$str]) ? $_REQUEST[$str] : false;
}
function segment( $no ){
return isset($this->segments[$no]) ? $this->segments[$no] : false;
}
}