我正在尝试为学习目的创建MVC框架。
所以,我试图通过阅读URL来调用正确的类和操作。但是,我在使用call_user_func
功能时遇到了麻烦。
我已经阅读了URL,并设置了控制器和操作名称,但我无法调用它。当我运行call_user_func
函数时,我收到以下错误:Fatal error: Class 'PageController' not found in...
显然班级没有加载,这就是我的问题。我怎么能在这里调用它? 我有一个命名空间,但我不知道它是否对某些东西有用。
这是代码
namespace Core\Dispatcher;
use Core\Routing\Router;
class Dispatch {
private $params = [];
public function dispatch()
{
$this->getParams();
/*error occurs here*/ call_user_func(new $this->params['Controller'], $this->params['Action']);
}
private function getParams()
{
$this->params = Router::read();
}
}
/*
* Router::read reads url and return an array with Controller and Action names
*/
是的,整个过程基于CakePHP Framework,但只有类名,文件夹等。
那么,任何想法?我忘记了信息?
谢谢
修改 这是我在Bitbucket上的回购链接。我认为它可以下载。 Bitbucket
答案 0 :(得分:0)
call_user_func的签名是:
mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
param 1是可调用的
param 2..n是参数
所以你在这里做的是,尝试使用action作为参数来调用对象本身。那不行。
为了调用对象函数, callable 必须采用格式
array($object, $method)
所以在你的例子中:
call_user_func(array(new $this->params['Controller'], $this->params['Action']));
如果您的控制器位于名称空间App \ Controller中,那么 $ this-> params [' Controller'] 的值必须为App \ Controller \ ClassName。
此外,您需要包含相应的php文件和类定义,除非您有自动加载。