PHP MVC 结构放在哪里 类

PHP MVC structure where to put own classes

我刚刚开始了解 MVC 模式。 我的问题是:

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

我应该在 model 函数中实例化 Controller 中的 classes 吗?

<?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';
    }
}

由于 MVC 包含三个主要部分,我建议(并注意到市场上几乎所有框架都这样做)为三个组件中的每一个创建一个目录,并将 类 放在适当的目录。

关于其他组件,Database是一个实用程序,可以放在例如lib目录中,User是一个模型,可以转到[=13] =]文件夹,Logger/Mailer也可以进入lib文件夹。这些是示例,并不是要严格遵循的内容。

至于实例化,每个Controller可以定义它所依赖的modelslibraries的列表,并让MVC框架处理这些对象的初始化。您将以这种方式遵循 dependency injection 模式。

Where would I put my other class files (Database, User, Logger, Mailer, etc)? Should I create a new directory for them, e.g. libs?

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

Should I instantiate the classes in the Controller inside the model function?

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

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