Kai*_*all 5 php model-view-controller structure
我刚开始看一下MVC模式.我的问题是:
我将把我的其他类文件(数据库,用户,记录器,邮件程序等)放在哪里?我应该为他们创建一个新目录libs吗?
我应该Controller在model函数内部实例化类吗?
<?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)
我应该把其他类文件(数据库、用户、记录器、邮件程序等)放在哪里?我应该为它们创建一个新目录,例如
libs?
将它们放在单独的文件中,因为它们都提供不同的功能应该没问题。您的目录命名没有区别 - 只要它符合您的项目或常规的命名约定(可能甚至更好)。
我应该在模型函数内实例化控制器中的类吗?
不。据我所知,流程可能类似于:
index接收请求并启动一个新bootstrap实例bootstrap设置可抛出处理程序和路由器router然后根据请求方法和通过匹配一组路由提供的 uri 来调用相应的方法route会初始化 MVC 三元组的所有组件和可调用方法。组件(Model层、View层和Controller层)被传递给router. 就我而言,我将类称为FrontController方法init。init是 MVC 三元组实际创建的地方。Model层负责业务逻辑、持久化等。需要注意的是,它Model不是单个文件或类(与View和相同Controller)。View层和层都Controller咨询Model层来执行各自的操作。View层的任务是管理输出,例如,决定输出是否有Content-Type或application/json,text/plain或Template渲染哪个。另外,Viewsare not Templates,用于显示数据。这里注意,Views直接向图层询问必要的数据Model;与该层没有任何交互Controller。最后,Controller当需要交互时,例如,用户提交表单,相应的Controller过滤输入并调用层中的方法,层就会介入Model。