【问题标题】:Logic in the Model or in the Controller with CodeIgniter?模型中的逻辑还是带有 CodeIgniter 的控制器中的逻辑?
【发布时间】:2011-03-12 14:26:27
【问题描述】:

总的来说,我对 CodeIgniter 和 MVC 哲学还比较陌生,所以在我养成任何坏习惯之前,我会努力澄清这一点。

我有一个注册的应用程序。用户。目前,流程是这样的:

  1. 用户导航到“somewebpage/register”,加载控制器的“注册”功能
  2. 控制器检查表单是否已提交 - 如果未提交,则显示表单,否则,调用“用户”模型的“注册”函数
  3. 用户模型检查用户名是否已被使用。如果是,它会为该错误返回一个错误代码(定义为 PHP 常量)。
  4. 如果尚未使用用户名,模型将注册用户并返回 TRUE。
  5. 控制器收集模型的“注册”函数返回的内容,并根据错误代码显示错误页面、成功页面或数据库失败页面。

如您所见,我尝试将尽可能多的逻辑移入模型中。我无法重新定位的唯一逻辑是表单验证,因为 CodeIgniter 似乎迫使您将其放入控制器中。 (除非有人知道解决办法)

这是我应该使用 CodeIgniter 还是一般的 MVC 开发的方式?

提前感谢您的帮助。

【问题讨论】:

    标签: model-view-controller codeigniter logic


    【解决方案1】:

    您会发现 CI 非常灵活,允许您以多种不同的方式组织事物。我的感觉是模型应该只保留给直接与你的数据库通信的函数。我不将它们用于一般逻辑。但是,我理解为什么您也不想用逻辑填充控制器。我的解决方案是创建您自己的库以包含您然后从控制器调用的逻辑。这里有关于如何创建自己的库的信息: http://codeigniter.com/user_guide/general/creating_libraries.html

    对于用户身份验证,我创建了一个名为 auth_library.php 的库,其中包含登录、注册等控制器使用的函数。以同样的方式,您可以创建一个 auth_model,其中包含与数据库连接的函数。

    您可能还对本系列教程感兴趣: http://www.phpandstuff.com/articles/codeigniter-doctrine-from-scratch-day-1-install-and-setup 作者将带您了解如何使用带有 CI 的学说插件,该插件在您的模型和数据库之间放置了一个抽象层。它非常有趣,解释得很好,并使用注册/登录系统作为初始示例。

    【讨论】:

    • MVC 中的模型应该有逻辑,因为它是领域模型,但是没有什么可以阻止你将它分成不同的层。
    • 感谢 musoNic80 和 airmanx86 的帮助!你们澄清了这个令人困惑的问题。我有点担心——没有人回答。 ;) 谢谢!
    • @airmanx86 ,musoNic80 我发现您的讨论很有用,但是我有一个问题。根据从控制器传递到模型的数据,在模型中应用逻辑是否是一种好方法。就像如果一个变量是空的,我想运行这个查询,否则这个查询。这是一个好方法吗?
    猜你喜欢
    • 1970-01-01
    • 2010-12-15
    • 2012-01-29
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多