我想在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仍然使用旧方法。
答案 0 :(得分:1)
为什么不使用自定义验证并使用不同的名称创建网址验证功能?
否则手册说您可以使用AppModel,Model或Behaviors中的函数覆盖Validation类方法。
这是本书中的相关链接。 http://book.cakephp.org/view/150/Custom-Validation-Rules#Adding-your-own-Validation-Methods-152