PHP路由器抛出错误

时间:2015-09-03 20:41:41

标签: php model-view-controller routing

我正在创建一个非常基本的PHP路由/控制器,仅用于学习目的。在一些项目中使用Laravel我非常喜欢它的路由功能所以我想要复制类似的东西。

$route->map('/', function() {
    echo 'Hello World!';
});

$route->map('/', array('uses' => 'PagesController@index'));

$route->start();

第一种方法效果很好,我相信它是一种匿名函数。第二种方法我可以用以下代码创建一个名为PagesController.php的文件:

Class PagesController extends Controller {
    public function index()
    {
        echo 'Hello World';
    }
}

这也有效,但它会引发错误:

Fatal error: Function name must be a string in /home/git/Codingcats-Blog/classes/Route.php on line 40

这是我的整个路由类:

    class Route
    {
        private $request = array();
        private $basePath = '/';

        function map($request, $params)
        {
            if (array_key_exists('uses', $params))
            {
                $parts = explode('@', $params['uses']);

                $controller = $parts[0];
                $method = $parts[1];

                if (!file_exists(PATH . 'controllers/' . $controller . '.php'))
                    exit('Controller: ' . $controller . ' does not exist.');

                require_once PATH . 'controllers/' . $controller . '.php';

                $controller = new $controller;

                if (method_exists($controller, $method))
                    $this->request[$request] = $controller->$method(); // ??????
            }
            else
            {
                $this->request[$request] = $params;
            }


        }

        function start()
        {
            $path = array_key_exists('PATH_INFO', $_SERVER) ? $_SERVER['PATH_INFO'] : $this->basePath;
            $this->request[$path]();
        }
    }

我不确定// ??????的那一行虽然我无法理解它,因为两种映射方法最终都是一个函数,并且两者都有效,只是第二次抛出错误

我可以直接使用$controller->$method();调用该函数,但我得到Notice: Undefined index: / in...

建议赞赏:)

0 个答案:

没有答案
相关问题