php - MVC 应该如何在 CodeIgniter 中工作

标签 php codeigniter model-view-controller web

作为一名主要是自学成才的程序员,在设计模式等方面,我迟到了。我正在使用 CodeIgniter 编写一个劳动力管理网络应用程序。

我在学校学过一点 MVC ASP.NET/C# 和 Java,惯例是你的模型主要由表示实际对象的类组成,但也抽象了所有数据库连接等......这很漂亮我收集的标准 MVC 内容。

我想我说的是对的,CI 完全抽象了数据库连接(除非你去寻找),这在类(class)中是一样的,你可以创建的模型可以抽象“通用”CRUD 方法创建一些对特定模型更有用的方法。

我有一个问题,因为它与我习惯的 MVC 不同,每当你说...从数据库返回一行时,约定是将它放在一个关联数组中或具有表示行中数据的属性的标准对象。

在 ASP 中,您可以构建实际的类来存储此信息。例如,您有一个 House 类,数据将存储为属性(例如 bedroomsbathroomsaddress) 和方法将代表您可以使用数据做的有用的事情(例如 printInfo() 可能 print("$address has $bedrooms bedrooms and $bathrooms bathrooms!')).

我的印象是——仅从我在 Internet 上看到的代码来看——这不是标准的做事方式。您是否应该只使用数组或通用对象,然后说...做 $this->house_model->print_info($houseobject) 而不是 $houseobject->print_info();?

谢谢。

最佳答案

尽管声称与此相反,Codeigniter 根本不使用 MVC(事实上,很少有 Web 框架使用 MVC!)它实际上使用 PAC(呈现-抽象-控制)架构。本质上,在 PAC 中,表示层由表示器(CodeIgniter 称为 Controller )提供数据,而在 MVC 中, View 从模型中获取自己的数据。由于 MVC 的这种错误标记而存在混淆。

因此,CodeIgniter(以及大多数其他流行的 Web 框架)不鼓励使用适当的模型,而只是使用非常基本的数据访问它的位置。由于“胖 Controller ”,这会导致大量问题。与域相关的所有代码都不可重用。

进一步阅读:

这是 PHP 社区中普遍存在的混淆点(MVC 与 PAC 文章将问题确定为源于 PHP 社区。那是在 2006 年编写的,没有任何改变,如果有的话,它变得更糟,因为有更多框架和教程教导了 MVC 的错误定义。)以及为什么来自非 Web 开发背景的人在查看“MVC”PHP 代码时会感到困惑,这是可以理解的。 PHP 中的大多数“MVC”实现都不是 MVC。您认为模型的结构应该正确,这是正确的,CodeIgniter 将自己标记为 MVC 是错误的。

关于php - MVC 应该如何在 CodeIgniter 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13813046/

相关文章:

jquery - 如何在js文件中调用base_url

asp.net-mvc - Mvc 异步操作崩溃 iis

model-view-controller - MVC 与 n 层架构

java - 在 GXT 中重新渲染

php - 在 php 标签中包含 javascript 变量

php - 将行添加到 WooCommerce 3.6 中的单个产品附加信息表

php - 代码点火器 : inserting data/record into 2 tables

php - Laravel 9 Azure 存储 Blob 服务器授权权限不匹配

php - laravel 5.4 ownsTo 和 hasMany 不适用于 2 个外键

php - 发生数据库错误!由 db_debug 设置为 false 修复?