我为php编写了自己的mvc,它似乎对我来说很好。但是我在获取控制器和操作时遇到了麻烦:
http://www.example.com/controller/action
这样可以正常工作,但只要对网址进行细微更改,我的代码就会破坏appart。例如:
http://www.example.com/controller? thi休息,说controller?
不存在,
http://www.example.com/controller/action? thi休息,说action?
不存在,
我无法弄清楚为什么需要?
在那里,如果有任何身体知道更强大,以获得正确的控制器和行动,我很想知道。
这是我的代码:
使用.htaccess
class Framework {
....
private function setup() {
$uri = (isset($_SERVER['REQUEST_URI']))?$_SERVER['REQUEST_URI']: false;
$query = (isset($_SERVER['QUERY_STRING']))?$_SERVER['QUERY_STRING']: '';
$url = str_replace($query,'',$uri);
$arr = explode('/',$url);
array_shift($arr);
$this->controller =!empty($arr[0])?$arr[0]:'home';
$this->action = isset($arr[1]) && !empty($arr[1])?$arr[1]:'index';
}
}
答案 0 :(得分:2)
$ _ SERVER ['QUERY_STRING']不包含?
,因此当您执行$url = str_replace($query,'',$uri);
时,您不会替换?
。因此,它正在寻找名为controller?
围绕这个
有各种各样的方法'?'.$query
explode('?', $url)
将查询字符串与URI $_SERVER['REQUEST_URL']
(不包含查询字符串),而不是获取整个内容然后自行拆分就个人而言,我会选择最后一个选项,因为只要代码已经为您编写,它往往比您可以编写的任何代码更快更强大。
答案 1 :(得分:1)
您应该在/
?
来解决问题