URL не работает, когда он пытается его для маршрутизации - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь поймать URL с моего локального хоста, здесь он http://localhost/mvc/index.php?url=Index/category, и все идет хорошо, но когда я пытаюсь использовать URL /category, он показывает ошибку.Вот ошибка

Примечание: преобразование массива в строку в C: \ xampp \ htdocs \ mvc \ index.php в строке 21

Примечание: неопределенное свойство: Index :: $Массив в C: \ xampp \ htdocs \ mvc \ index.php в строке 21

Неустранимая ошибка: необработанная ошибка: имя функции должно быть строкой в ​​C: \ xampp \ htdocs \ mvc \ index.php: 30Трассировка стека: # 0 {main} создается в C: \ xampp \ htdocs \ mvc \ index.php в строке 21

<?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 голосов
/ 04 июня 2018

сразу две вещи: "/" недопустимо в параметре url как части строки get.вам нужно инкапсулировать его с помощью 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 внутри класса, кромеесли это статический метод.

Научитесь кодировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...