【问题标题】:Kohana validation 'matches' ruleKohana 验证“匹配”规则
【发布时间】:2013-05-10 17:18:11
【问题描述】:

我将 Kohana 3.3 用于具有扩展 ORM 的模型类的项目。在 MySQL 数据库中有一个与该模型对应的表。在此表中,有 3 列不应具有相同的值。我还有一个视图,用户可以在其中添加到此模型,其中 item1、2、3 是文本输入字段。 我正在尝试在模型中编写验证,该模型强制执行 item1、2、3 不能具有相同值的规则。 代码的结构和相关部分是这样的:

数据库表:

id | column1 | othercolumns | item1 | item2 | item3 

模型类:

public function rules(){
    return array(
        "item1" => array( array('matches', array(':validation',':field','item2') ) ),
        "item1" => array( array('matches', array(':validation',':field','item3') ) ),
        //same for item2 and item3
    );
}

我阅读了thisthisthis 页面,但我无法理解如何直接在模型中正确实现。 (我可以在客户端的 JavaScript 中执行此操作,但我想避免将其留给框架!)

【问题讨论】:

    标签: validation kohana


    【解决方案1】:

    您只需要一个验证回调:

    return array(
        'item1' => array(function($field, Validation $object, $compare1, $compare2) {
            $values = array($object[$field], $object[$compare1], $object[$compare2]);
            if (count(array_unique($values)) < count($values))
            {
                $object->error($field, 'unique_fields');
            }
        }, array(':field', ':validation', 'item2', 'item3'))
    );
    

    这只是一个简单的例子。例如,您可以使用动态字段计数。

    【讨论】:

    • 谢谢,我想我明白这里发生了什么!感谢您的帮助!
    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    相关资源
    最近更新 更多