我对MVC很新。
我正在使用CodeIgniter创建一个人们可以提交调查的平台,然后将调查放在数据库中,以便稍后在用户的仪表板内使用。
现在我感到困惑,我将如何创建这项调查?我会制作一个控制器或模型吗?我是否同时使用控制器创建表单,然后使用模型将数据提交到数据库?
我可以直接在控制器中与我的数据库进行交互吗?
答案 0 :(得分:0)
您的模型应该具有直接与DB交互的功能,您可以使用另一个自定义类来实现这些模型,控制器将调用该类中的函数。虽然您可以在控制器中实现代码,但您肯定希望为您提供可读性和可访问性。
答案 1 :(得分:0)
<强>模型强>
通常,数据库表由模型表示。例如,如果您有一个名为“survey”的表,您将需要一个surveys_model
类,允许您对该表执行表级操作(选择,插入,更新,删除等)。
然后,您可以创建另一个模型来表示该表中的一行,名为survey_model
(注意它是单数)。此类通常具有与表中的列匹配的1对1的属性。在此模型中,您可以实施业务规则。例如,如果您不希望调查包含两次相同的问题,则可以添加逻辑以在添加新问题时检查问题是否已存在。
获取数据库记录和创建对象的过程称为“映射”,并且有自动执行此操作的软件(ORM软件)。您也可以使用自己的简单映射,因为大多数ORM都有一点学习曲线。
您也可以跳过映射并直接使用db结果(用于读取/输出)。当您想要写入数据时,只需将数据作为参数或数组传递给表级模型。
查看强> 该视图包含用于向用户显示表单的前端代码(HTML / CSS / JS)。如果用户正在查看现有调查(例如,出于编辑目的),则必须使模型可用于查看(或者至少是模型中的一些数据)。
此处唯一的逻辑应该是出于显示的目的。例如,在一定条件下显示一个文本块,在不同条件下显示另一个文本块(但如果整个输出是有条件的,则应将其拆分为2个视图,并将逻辑移动到控制器以加载正确的观点)。
<强>控制器强> 这是控制显示哪个视图,加载哪些模型以及传递给视图的数据的内容。您可以传递整个模型,或只传递模型中的一些数据。
它还控制视图和模型之间的交互。例如,如果您发布表单,控制器将获取表单数据,验证表单,加载模型,使用发布数据更新模型中的数据,并保存模型。然后它可以显示成功或错误消息(或重定向到一个全新的页面)。
有时您会发现在控制器中将相关功能组合在一起很困难,因为它的类和方法名称用于路由,或者您会发现控制器变得太长且难以管理。这是库的用武之地。
您可以将逻辑移出控制器并移入库中。这样,您可以保持控制器的精益,并将逻辑分组,而不必担心对路由的影响。
对于全球需要不需要课程的功能,您可以将这些功能放在帮助中。您可以查看内置的CI帮助程序,以查看属于帮助程序文件的函数类型。
答案 2 :(得分:0)
使用控制器或不使用控制器访问数据库这不是问题,只需回到mvc的概念,mvc基于模型(对数据库进行哈希处理),查看(查看页面)和控制器控制我们与模型和视图有什么关系,所以我想知道使用模型与否使用Codeigniter构建一些应用程序是没有问题的,只是我们必须回到基本概念,如果你想用MVC方式做到这一点你必须使用模型,但如果不是也可以