【发布时间】:2012-07-30 23:45:38
【问题描述】:
我正在用 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;
}
}
【问题讨论】:
-
不清楚您的问题是什么。什么不工作?
-
@Laurent 我已经编辑了帖子,希望它能让事情更清楚。
标签: php arrays model-view-controller