HMVC中的用户输入验证

时间:2014-04-14 05:50:13

标签: php validation kohana hmvc

在阅读了关于这个主题的无数答案之后,我觉得我还没有找到这个问题的明确答案 - 在哪里以及如何在(H)MVC中进行用户输入验证?按照流行的观点,我在MODEL中编写验证代码的想法已经部分销售,但是这给我留下了以下两个问题。

1)MODEL如何知道哪个UI元素(例如: - 具有id user_name的文本框)负责出错,以便它可以使VIEW将焦点放在该特定UI元素上或在其旁边显示错误消息?

2)我在SO中的某处读过,一旦你将验证例程放在MODEL中,你就可以利用JS直接调用那些MODEL方法。在这种情况下,它不会违反MVC模式的基本规则吗?

如果MODEL不适合验证码,您会在哪里建议?

请分享您的想法。

谢谢,

1 个答案:

答案 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。