2014-09-27 72 views
2

我正在使用PHP Codeigniter atm。我读过几篇强调“胖模型和精简控制器”的文章,并且该模型应该处理所有的业务逻辑,让直接处理数据库和控制器的方法直接处理用户输入。遵循这些规则,似乎有必要通过控制器间接传递$ _POST数组数据。但有时它更直接,几乎必须直接在控制器中处理用户数据。关于MVC设计的建议,在控制器中生成视图

此外,CI的form_validation类不允许您在配置文件的form_validation.php中设置自定义错误消息。为此,我们需要编写call_back方法。但是,如果我们要为每个字段编写call_back方法,控制器将会变得“胖”,并且为什么我会首先使用form_validation类。

另一件事是,有时我会发现需要根据数据库和用户输入等来生成内容。但是在控制器中这样做似乎违背了“逻辑和表示的分离”。例如,CI有一个表格和表格助手,分页等......这些都是演示文稿。将这些写入控制器会使控制器再次变得肥胖。所以我想我可能应该为视图生成编写控制器方法,或者我应该编写一个模型或库来处理演示文稿?

我很感激一般的MVC方法的一些很好的建议和提示。谢谢。

+0

嗯,事情是,CodeIgniter与MVC没什么关系(除了用它作为营销工具)。至于“表单验证”,在适当的MVC设置中,您应该(也将)能够将表示层与模型层分开。数据来自html表单应该没关系。验证规则**是**业务规则的一部分。这就是为什么它应该发生在模型层的内部。特别是 - [域对象](http://c2.com/cgi/wiki?DomainObject)。 – 2014-09-27 19:56:43

回答

1

你可以看看它是如何在CakePHP中完成的,它们试图更贴近MVC架构。

但有时它更直截了当,几乎需要在控制器中直接

你几乎从来没有想这样做来处理用户数据。当控制器调用一堆模型方法时,情况会更加清晰。这会鼓励代码重用,因为这样您可以轻松地在另一个控制器中引用相同的模型方法。

要做到这一点,我们需要编写call_back方法。但是,如果我们要为每个字段编写call_back方法,控制器将会变得“胖”,并且为什么我会首先使用form_validation类。

对于表单验证,该模型具有validate财产与领域的阵列,以验证并有所有型号的一般validates方法,检查被保存对模型的validate属性的数据。然后,它可以使数据中的单个字段“无效”,并将其传递回显示该字段上的错误的视图。

所以我想我应该可能写视图生成的控制器方法,或者我应该写一个模型或库来处理演示?

编写助手类。 Helper类被视为视图之间的共享代码,而不是控制器的一部分。