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