PHP MVC结构放置自己的类

Kai*_*all 5 php model-view-controller structure

我刚开始看一下MVC模式.我的问题是:

我将把我的其他类文件(数据库,用户,记录器,邮件程序等)放在哪里?我应该为他们创建一个新目录libs吗?

我应该Controllermodel函数内部实例化类吗?

<?php

class Controller {
    protected function model($model) {
        require_once('../app/models/'. $model .'.php');

        return new $model();
    }

    protected function view($view, $data = []) {
        require_once '../app/views/'. $view .'.php';
    }
}
Run Code Online (Sandbox Code Playgroud)

sit*_*lge 4

我应该把其他类文件(数据库、用户、记录器、邮件程序等)放在哪里?我应该为它们创建一个新目录,例如libs

将它们放在单独的文件中,因为它们都提供不同的功能应该没问题。您的目录命名没有区别 - 只要它符合您的项目或常规的命名约定(可能甚至更好)。

我应该在模型函数内实例化控制器中的类吗?

不。据我所知,流程可能类似于:

  1. 文件index接收请求并启动一个新bootstrap实例
  2. bootstrap设置可抛出处理程序和路由器
  3. router然后根据请求方法和通过匹配一组路由提供的 uri 来调用相应的方法
  4. 匹配route会初始化 MVC 三元组的所有组件和可调用方法。组件(Model层、View层和Controller层)被传递给router. 就我而言,我将类称为FrontController方法init
  5. 基本上,这init是 MVC 三元组实际创建的地方。Model层负责业务逻辑、持久化等。需要注意的是,它Model不是单个文件或类(与View和相同Controller)。View层和层都Controller咨询Model层来执行各自的操作。View层的任务是管理输出,例如,决定输出是否有Content-Typeapplication/jsontext/plainTemplate渲染哪个。另外,Viewsare not Templates,用于显示数据。这里注意,Views直接向图层询问必要的数据Model;与该层没有任何交互Controller。最后,Controller当需要交互时,例如,用户提交表单,相应的Controller过滤输入并调用层中的方法,层就会介入Model