在阅读了关于这个主题的无数答案之后,我觉得我还没有找到这个问题的明确答案 - 在哪里以及如何在(H)MVC中进行用户输入验证?按照流行的观点,我在MODEL中编写验证代码的想法已经部分销售,但是这给我留下了以下两个问题。
1)MODEL如何知道哪个UI元素(例如: - 具有id user_name的文本框)负责出错,以便它可以使VIEW将焦点放在该特定UI元素上或在其旁边显示错误消息?
2)我在SO中的某处读过,一旦你将验证例程放在MODEL中,你就可以利用JS直接调用那些MODEL方法。在这种情况下,它不会违反MVC模式的基本规则吗?
如果MODEL不适合验证码,您会在哪里建议?
请分享您的想法。
谢谢,
答案 0 :(得分:0)
1)MODEL如何知道哪个UI元素(例如: - 具有id user_name的文本框)负责出错,以便它可以使VIEW将焦点放在该特定UI元素上或在其旁边显示错误消息?
模型不知道(也不需要知道)哪个UI元素负责。 Kohana ORM validation functions旨在将一系列错误返回给控制器,控制器将其插入视图中。 Kohana文档的an example正是您要做的。
2)我在SO中的某处读过,一旦你将验证例程放在MODEL中,你就可以利用JS直接调用那些MODEL方法。在那种情况下,它不会像打破MVC模式的基本规则那样吗?
Kohana没有任何内置的基于JavaScript的模型验证。您可以使用许多附加JavaScript验证框架,大多数常见的验证框架都可以通过生成服务器端代码中的类名列表,特殊data-*
属性或JavaScript数组来实现,由客户端验证代码使用。生成此验证数据的正确方法是在控制器中,通过向模型询问它执行的验证数组,然后在控制器内使用该数组来构建JavaScript。
此技术与上述技术之间的唯一区别在于,前者仅向模型询问失败验证的名称,而后者则询问模型中所有验证的名称。
为此,您需要创建一个新类Validation extends Kohana_Validation
并向其添加一个方法get_rules
,该方法返回此对象的验证规则。然后,在控制器中,您可以调用my_model->validation()->get_rules()
并处理规则数组以生成JavaScript。