OTA*_*TAR 0 php model-view-controller
我读到MVC模式,整个php逻辑必须在模型中,但是当我们有这样的情况时:从模型传递mysqli_result对象到视图,在视图中我们需要从某些列(mysql表列)检查值并根据这个值,这是鉴于我们有:
while ($row = $my_mysqli_result_object->fetch_assoc()) {
if ($row['some_column'] == "1") {
// print something
}
else if ($row['some_column'] == "2") {
// print something other
}
else if ($row['some_column'] == "3") {
// print something other
}
// ....
// ....
}
Run Code Online (Sandbox Code Playgroud)
如你所见,在视图中是php逻辑(很少逻辑,但存在).
我的问题是:这个剂量的php逻辑在视图中,通常用于MVC概念?或者这不是MVC的正确方法,在这种情况下必须做其他事情吗?
MVC设计模式的每个部分都有特定的角色.它是通过引入两种分离(由分离关注原则引入的概念)来完成的:
实际上,当您查看设计合理的模型层时,它还会针对不同的任务合并不同的结构:应用程序逻辑,域逻辑或存储逻辑.
有一种常见的误解,主要是由Rails [2]粉丝和框架延续,试图模仿它.视图不是一个愚蠢的模板.
在MVC的现代解释中,当应用于Web时,Views是实例,其包含大多数UI逻辑.是的,逻辑.View应该从模型层获取信息,并根据它获得的数据,决定生成什么样的响应以及组合响应所需的模板.
在how用于采集数据的是,分离的MVC启发图案像Model2的MVC,MVVM和MVP的主要因素之一.
代码.您展示的内容应该被拆分,因为它有两个不同的目标:从存储中检索信息并对输出做出决策.该fetch_assoc()位应该进入模型层(很可能是在某些数据映射器实例中.并且您的switch( $someColumn )语句应该移动到视图实例.
作为一个不相关的注释,这个例子让我想到,你实际上在那里处理一些
status专栏.在这种情况下,最好放弃if/else使用$status = $listOfOption[ $someColumn ],只使用,在哪里$listOfOptions = [0 => 'error', 1 => 'pending', 2 => 'unconfirmed', 3 => 'complete'];......或者其他东西
您的视图应该是决定如何表示该列以及必须将哪个值绑定到模板的视图.