我使用CodeIgniter开发了大部分Web应用程序,并且在将此数据发送到模型之前,一直采用验证控制器内部的表单数据的方法,即使用内置的Form Validation类,被使用,例如将数据插入到数据库中。MVC架构中的数据和表单验证
但是,我不断听到“瘦控制器,胖模型”行 - 我想知道如果这些验证检查应放置在模型内。
当我想到使用这种方法时,有三件事引起了我的注意。
如何向用户显示不同的错误消息,而不会从这些模型函数返回看起来很丑陋的数组或对象?例如在注册帐户时有重复的电子邮件。负责在模型中添加用户的方法是否必须返回一个数组或对象以指示插入是否成功以及任何错误消息?
通过在模型中进行验证检查,检查从控制器提供给方法的变量(而不是POST数据),我将失去使用Form Validation类,这个类在我的项目中非常有用。你会建议我编写一个类或可以像CI库一样使用的库来模拟Form Validation类,但是对于提供的变量,而不限于POST数据?
继续关注......由于在传递给模型之前POST数据必须经过存在验证(
isset($_POST['myvar'])
),其余验证是否也应该放在控制器中?
任何意见,建议,意见将不胜感激!
不错的答案,+1。 – 2012-04-03 08:10:30
谢谢你的非常详细的回应 - 我读过你的一些链接,很好的阅读!那么,你是否建议一种方法可以在模型的方法内进行验证,并返回描述/表示错误的数据对象或对象? 如 在检索用户记录的方法,如果一个id供给,返回用户的对象,如果没有返回有错误消息和状态代码的对象,等 你会如何处理这在控制器中? – Sam 2012-04-03 14:48:36
@Sam,如果你想使用ActiveRecord对象,那么你将不得不在它里面。你应该创建一些设置器,它将验证器传递给对象,然后在同一点对你的字段集进行验证。错误时,你可以抛出一个异常,然后你在控制器(实际上在CI中,它是“主持人”)处理。 – 2012-04-04 04:54:37