2010-07-07 79 views
4

我对CodeIgniter和MVC哲学比较陌生,所以我在做任何坏习惯之前都试图澄清这一点。模型或CodeIgniter控制器中的逻辑?

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

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

正如您所看到的,我尝试将尽可能多的逻辑移入模型中。我无法重新定位的唯一逻辑就是表单验证,因为CodeIgniter似乎强迫你把它放到Controller中。 (除非有人知道解决这个问题的方法)

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

在此先感谢您的帮助。

回答

6

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

对于用户身份验证创建其中载登录时使用的函数库叫auth_library.php,注册等控制器。以同样的方式,你可以创建一个auth_model,其中包含与db连接的函数。

您可能也有兴趣在这个系列教程: http://www.phpandstuff.com/articles/codeigniter-doctrine-from-scratch-day-1-install-and-setup 笔者将向您介绍使用与CI学说插件,它使你的模型和数据库之间的抽象层。这是非常有趣的,出色的解释和使用注册/登录系统的初始例子。

+1

MVC中的模型假设它具有逻辑,因为它是领域模型,但没有什么能够阻止你将它分解成不同的层。 – airmanx86 2010-07-07 14:57:51

+0

谢谢你的帮助,musoNic80和airmanx86!你们澄清了这个令人困惑的问题。 我越来越担心 - 没有人回答。 ;) 谢谢! – 2010-07-10 06:54:30

+0

@ airmanx86,musoNic80我发现你的讨论很有用,但是我有一个问题。根据从控制器传递给模型的数据,在模型中应用逻辑是一种好方法吗?就像如果一个变量是空的,我想运行这个查询,否则这个查询。这是一个好方法吗? – 2017-03-02 08:29:15

相关问题