使用Phalcon进行条件验证

时间:2014-03-20 16:37:10

标签: php phalcon

使用Phalcon的验证功能可以做任何事情:

$validation->add('telephone', new PresenceOf( [
    'message'       => 'The telephone is required',
    'onFail'        => //Validate this,
    'onSuccess'     => //Validate that
]));

编辑:

好吧,我要求这个,因为我有一些验证只有在2个或3个条件匹配以任何顺序时才能运行,所以cancelOnFail属性对我没有帮助很多。

也许如果我创建一个像$validation->add('stuff', new ComplexValidation())这样的自定义验证组,但订单仍然存在问题。该验证系统的工作方式非常线性。考虑到这些因素,我如何使用Phalcon实现更复杂的验证?

1 个答案:

答案 0 :(得分:1)

是。 Phalcon有一个类似的验证系统。以下代码将用于确保电话'字段提供:

$this->validate(new PresenceOf(
    array(
            "field"   => "telephone",
            "message" => "The telephone is required"
         )
));

validation()函数中的模型上调用此验证器。根据{{​​3}},PresenceOf验证程序会自动添加到模型表中标记为“非空”的字段中。如果我理解正确,如果您的字段为“非空”,则实际上不需要插入此代码,但如果您要覆盖此特定表单的默认“验证失败”消息,则可以这样做。您可以通过覆盖模型中的getMessages()函数来修改默认验证消息(并提供翻译)。有关Phalcon验证消息系统the documentation的其他信息。

失败消息与来自其他字段验证的其他消息(例如Uniqueness)聚合在一起。对于每个失败的验证,您可以访问消息,字段,类型(和原始模型)。对于每个失败的验证,以下代码将输出消息中包含的所有信息:

if ($form->save() == false) {
    foreach ($form->getMessages() as $message) {
        echo "Message: ", $message->getMessage();
        echo "Field: ", $message->getField();
        echo "Type: ", $message->getType();            
        echo "Model: ", $message->getModel();
    }
}

我注意到了两种不同的方法来通知用户验证消息:在表单之前放在一起(如此处所示)或放在表单输入本身附近。如果要将消息输出到输入附近,则可能需要迭代每条消息(来自getMessages())并检查与输入匹配的字段名称,然后使用getMessage()回显消息。

我自己非常对Phalcon来说是新的,所以我还没有探索验证器的所有功能。您可以使用事件系统插入代码beforeValidationafterValidation。这可能是寻找输出成功验证消息的一个地方。