我刚开始看一下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';
}
}
答案 0 :(得分:3)
我将把我的其他类文件(数据库,用户,记录器,邮件程序等)放在哪里?我应该为它们创建一个新目录,例如
libs
?
将它们放在单独的文件中,因为它们都提供不同的功能应该没问题。目录命名没有区别 - 只要它符合项目或一般命名约定(可能更好)。
我应该在模型函数中实例化Controller中的类吗?
不。据我所知,流程可能类似于:
index
文件接收请求并启动新的bootstrap
实例bootstrap
设置throwable处理程序和路由器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
,或Views
} 渲染。此外,Templates
不是Views
,用于显示数据。请注意,Model
直接从Controller
图层询问必要的数据;没有任何与Controller
层的互动。最后,当需要交互时,Controller
层会介入,例如,用户提交表单,相应的Model
过滤输入并从中调用方法{{1}}图层。答案 1 :(得分:1)
由于MVC有三个主要部分,我建议(并注意到市场上几乎所有框架都这样做)创建三个组件中每个组件的目录,并将这些类放在适当的目录中。
关于其他组件,Database
是一个实用程序,可以放在lib
目录中,User
是一个模型,可以转到model
文件夹,Logger
/ Mailer
也可以转到lib文件夹。这些都是示例,而不是严格遵循的内容。
对于实例化,每个Controller
可以定义它所依赖的models
和libraries
的列表,并让MVC
框架处理这些对象的初始化。您以这种方式遵循dependency injection
模式。