覆盖CakePHP中的验证方法

时间:2010-01-18 22:38:13

标签: validation cakephp override

我想在CakePHP中使用默认的url()验证方法,因为它不允许使用〜inside urls。我认为在AppModel中声明url()方法就足够了,但核心方法似乎优先于用户定义的方法。

我认为(但我没有尝试过)一种可能的方法是使用

$validate = array('url' => array(
    'rule' => array('Userdefined', 'url'),
    'message' => 'This is not an URL!!!'
));

或类似的东西(什么是正确的sintax?)。但这并不完全令人满意。

确实我将$ validate变量作为JSON对象传递给我的javascript,然后我相应地进行客户端验证。基本上我已经在javascript中重写了CakePHP验证的一部分自动化。所以我真的想拥有

$validate = array('url' => array(
    'rule' => 'url',
    'message' => 'This is not an URL!!!'
));

为了不破坏客户端验证。

编辑:事实证明我错了。问题是验证中的方法与模型中的方法的调用方式不同,因此在复制/粘贴时必须注意。

第一个区别是$ check现在是一个数组而不是一个字符串,但我已经想通了。我没有意识到的是,另一个参数数组被传递给Model中的Validation方法。由于url()的签名是

url($check, $strict = false)

结果是$ strict始终具有值true,因此需要具有协议前缀的完整URL。看到使用波浪号的预期URL未验证我认为问题是CakePHP仍然使用旧方法。

1 个答案:

答案 0 :(得分:1)

为什么不使用自定义验证并使用不同的名称创建网址验证功能?

否则手册说您可以使用AppModel,Model或Behaviors中的函数覆盖Validation类方法。

这是本书中的相关链接。 http://book.cakephp.org/view/150/Custom-Validation-Rules#Adding-your-own-Validation-Methods-152