在尝试路由时,URL无法正常工作

时间:2018-06-04 10:50:53

标签: php url-routing

我正试图从我的localhost中捕获URL,就在这里     http://localhost/mvc/index.php?url=Index/category并且事情进展顺利但是当我尝试使用网址/category时,它显示错误。这是错误

  

注意:第21行的C:\ xampp \ htdocs \ mvc \ index.php中的数组到字符串转换

     

注意:第21行的C:\ xampp \ htdocs \ mvc \ index.php中的未定义属性:Index :: $ Array

     

致命错误:未捕获错误:函数名必须是C:\ xampp \ htdocs \ mvc \ index.php中的字符串:30堆栈跟踪:#0 {main}在C:\ xampp \ htdocs \ mvc \ index中引发第21行的.php

<?php
include_once "system/libs/main.php";
include_once "system/libs/Dcontroller.php";
include_once "system/libs/Load.php";
?>
<?php
$url = isset($_GET['url']) ? $_GET['url'] : NULL;
if ($url != NULL) {
    $url = rtrim($url,'/');
    $url = explode("/", filter_var($url,FILTER_SANITIZE_URL));
} else {
    unset($url);
}
if (isset($url[0])){
    include 'app/controllers/'.$url[0].'.php';
    $ctlr = new $url[0]();
    if (isset($url[2])) {
        $ctlr->$url[1]($url[2]);
    } else {
        if (isset($url[1])) {
            $ctlr->$url[1]();  //Here is the line where I'm getting the 
                                 error
        } else {

        }           
    }

}else{
    include 'app/controllers/Index.php';
    $ctlr = new Index();
    $ctlr->home(); 
}   
?>

但是在我使用的时候         category()代替$url[1] 它工作正常。这是Index类。

<?php
class Index extends Dcontroller
{   
    public function __construct()
    {
        parent::__construct();
    }
    public function home()
    {
        $this->load->view("home");
    }
    public function category()
    {
        $data = array();
        $catModel = $this->load->model("CatModel");
        $data['cat'] = $catModel->catList();
        $this->load->view("category", $data);
    }
}

1 个答案:

答案 0 :(得分:0)

立即做两件事:作为get字符串的一部分,“/”在url参数中是不合法的。你需要用URL编码封装它

EG:

  http://localhost/mvc/index.php?url=Index%2Fcategory

这也是"$ctlr->$url[1]"根本就没有一个叫做它的函数的事实..例如:无论"$ctlr->$url[1]"解析为什么?category() ??不存在,你需要做它。

将此添加到您的代码

 function category() {
       Index tmp = new Index();
       tmp->category();
 }

编辑:我刚才注意到,它比我想象的更愚蠢..你的字符串说Index/category不是吗?..让类方法静态..(这个代码很糟糕,因为它几乎没有显示任何设计的声音知识)没有Index/category因为你不能在类中调用category,除非它是一个静态方法。

学习编码。