使用FrontController的PHP定制MVC框架
我有点困惑。我想建立我自己的框架,只是为了了解每件事是如何运作的,而不是我将在大型项目中使用它 我有一个FrontController类,这个类里面有路由功能使用FrontController的PHP定制MVC框架,php,model-view-controller,Php,Model View Controller,我有点困惑。我想建立我自己的框架,只是为了了解每件事是如何运作的,而不是我将在大型项目中使用它 我有一个FrontController类,这个类里面有路由功能 用于设置/获取控制器参数的函数 从控制器设置/获取操作(方法)的函数 函数解析请求的URI并返回适当的控制器(如果存在),如果不返回默认控制器(即IndexController) 执行以下操作的Run()方法: public function run() { $method = new \ReflectionMethod($
public function run() {
$method = new \ReflectionMethod($this->controller, $this->action);
$numParams = $method->getNumberOfParameters();
//fill missing parameters with null values
if (count($this->params) != $numParams) {
$tempArray = array_fill(0, $numParams, null);
$this->setParams($this->params + $tempArray);
}
$controller = new $this->controller;
$userInstance = User::getInstance();
//just creates a model based on the controller name by default its
//Index.php (model)
$model = DB::createModel($this->getControllerName());
//run _before before any function
$controller->_before($model, $userInstance);
call_user_func_array(array($controller, $this->action), $this->params);
return;
}
现在我看到了教程,它们使用BaseController
,然后每个控制器都从这个BaseController扩展。我的控制器不从FrontController扩展因为run()函数实际上将模型和用户对象传递给控制器。需要记住的一个基本原则是。一个设计良好的类只有一个职责 所以是。您需要将路由和所有其他责任分开 还要注意,模型必须被视为一个层,而不是一个类或对象。模型层是类(数据访问、服务)的集合。事实上,您的
User
类应该被视为该层的一部分