使用FrontController的PHP定制MVC框架

使用FrontController的PHP定制MVC框架,php,model-view-controller,Php,Model View Controller,我有点困惑。我想建立我自己的框架,只是为了了解每件事是如何运作的,而不是我将在大型项目中使用它 我有一个FrontController类,这个类里面有路由功能 用于设置/获取控制器参数的函数 从控制器设置/获取操作(方法)的函数 函数解析请求的URI并返回适当的控制器(如果存在),如果不返回默认控制器(即IndexController) 执行以下操作的Run()方法: public function run() { $method = new \ReflectionMethod($

我有点困惑。我想建立我自己的框架,只是为了了解每件事是如何运作的,而不是我将在大型项目中使用它

我有一个FrontController类,这个类里面有路由功能

  • 用于设置/获取控制器参数的函数
  • 从控制器设置/获取操作(方法)的函数
  • 函数解析请求的URI并返回适当的控制器(如果存在),如果不返回默认控制器(即IndexController)
  • 执行以下操作的Run()方法:

    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扩展

  • 我的问题是我是否需要一个单独的类来进行路由?是否需要将FrontController拆分为

  • 基站控制器
  • Route.php
  • Model.php

  • 因为run()函数实际上将模型和用户对象传递给控制器。

    需要记住的一个基本原则是。一个设计良好的类只有一个职责

    所以。您需要将路由和所有其他责任分开

    还要注意,模型必须被视为一个层,而不是一个类或对象。模型层是类(数据访问、服务)的集合。事实上,您的
    User
    类应该被视为该层的一部分