【问题标题】:A Survey Model or Controller?调查模型或控制器?
【发布时间】:2011-12-15 07:50:51
【问题描述】:

我对 MVC 很陌生。

我正在使用 CodeIgniter 创建一个平台,人们可以提交调查,然后将该调查放入数据库中,以便稍后在用户仪表板中使用。

现在我有点困惑,我该如何创建这个调查?我会做控制器还是模型?我会同时使用控制器来创建表单,然后使用模型将数据提交到数据库吗?

我可以直接在控制器中与我的数据库交互吗?

【问题讨论】:

    标签: php model-view-controller codeigniter survey


    【解决方案1】:

    型号 通常,数据库表由模型表示。例如,如果您有一个名为“surveys”的表,您将需要一个surveys_model 类,允许您对该表执行表级操作(选择、插入、更新、删除等)。

    然后,您可以创建另一个模型来表示该表中的单行,命名为survey_model(注意它是单数的)。此类通常具有与表中的列一对一匹配的属性。在此模型中,您可以强制执行业务规则。例如,如果您不希望调查包含两次相同的问题,则可以在添加新问题时添加逻辑以检查问题是否已存在。

    获取数据库记录并创建对象的过程称为“映射”,并且有软件可以自动执行此操作(ORM 软件)。您也可以滚动自己的简单映射,因为大多数 ORM 都有一些学习曲线。

    您也可以跳过映射并直接使用 db 结果(用于读取/输出)。当您要写入数据时,只需将数据作为参数或数组传递给表级模型即可。

    查看 该视图包含用于向用户显示表单的前端代码 (HTML/CSS/JS)。如果用户正在查看现有调查(例如,出于编辑目的),则必须使模型可供查看(或至少模型中的一些数据)。

    这里唯一的逻辑应该是为了显示的目的。例如,在某个条件下显示一个文本块,在不同条件下显示另一个文本块(但如果整个输出是有条件的,则应将其拆分为 2 个视图,并将逻辑移至控制器以加载正确的观点)。

    控制器 这是控制要显示哪个视图、加载哪些模型以及将哪些数据传递给视图的内容。您可以传递整个模型,也可以只传递模型中的一些数据。

    它还控制视图和模型之间的交互。例如,如果您发布一个表单,控制器将获取表单数据,对其进行验证,加载模型,使用发布数据更新模型中的数据,然后保存模型。然后它可以显示成功或错误消息(或重定向到一个全新的页面)。

    有时您会发现很难在控制器中将相关功能组合在一起,因为它的类和方法名称用于路由,或者您会发现控制器变得太长且难以管理。这就是的用武之地。

    您可以将逻辑移出控制器并移入库。通过这种方式,您可以保持控制器精简并对逻辑进行分组,而不必担心对路由的影响。

    对于不需要类的全局需要的函数,可以将它们放在 helpers 中。您可以查看内置 CI 帮助程序以查看属于帮助程序文件的函数类型。

    【讨论】:

    • 这是很好的信息,你真的为我清除了一切。
    【解决方案2】:

    您的模型应该具有直接与数据库交互的功能,您可以有另一个自定义类来实现这些模型,并且控制器将调用该类中的函数。虽然你可以在你的控制器中实现代码,但是你肯定想让你的代码对你来说可读和可访问。

    【讨论】:

      【解决方案3】:

      使用控制器或不访问数据库都不是问题,首先回到mvc的概念,mvc是基于模型(与数据库进行处理),视图(查看页面)和控制器来控制我们对模型和视图所做的事情,所以我想知道是否使用模型来使用 Codeigniter 构建一些应用程序是没有问题的,只是我们必须回到基本概念,如果你想用 MVC 方式来做,你必须使用模型,但如果不是也可以

      【讨论】:

        猜你喜欢
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-10
        • 2011-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多