Validation CakePHP中的重写验证方法

Validation CakePHP中的重写验证方法,validation,cakephp,overriding,Validation,Cakephp,Overriding,我想在CakePHP中验证默认的url()验证方法,因为它不允许使用~inside url。我认为在AppModel中声明url()方法就足够了,但核心方法似乎比用户定义的方法具有优先权 我认为(但我没有尝试过)一种可能的方法是使用 $validate = array('url' => array( 'rule' => array('Userdefined', 'url'), 'message' => 'This is not an URL!!!' )); 或

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

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

$validate = array('url' => array(
    'rule' => array('Userdefined', 'url'),
    'message' => 'This is not an URL!!!'
));
或者类似的东西(什么是正确的sintax?)。但这并不完全令人满意

实际上,我将$validate变量作为JSON对象传递给javascript,然后相应地执行客户端验证。基本上,我已经用javascript重写了CakePHP验证automagic的一部分。所以我真的很想

$validate = array('url' => array(
    'rule' => 'url',
    'message' => 'This is not an URL!!!'
));
为了不破坏客户端验证

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

第一个区别是$check现在将是一个数组而不是一个字符串,但我已经弄明白了这一点。我没有意识到的是,另一个参数数组被传递给模型中的验证方法。因为url()的签名是


结果是$strict的值始终为true,因此需要带有协议前缀的完整URL。看到使用tilde的预期URL没有进行验证,我认为问题在于CakePHP仍然使用旧方法。

为什么不使用自定义验证并使用其他名称创建URL验证函数

否则,手册会说,您可以使用AppModel、Model或Behavior中的函数覆盖验证类方法

这是书中的相关链接。

为什么不使用自定义验证并使用其他名称创建url验证函数

否则,手册会说,您可以使用AppModel、Model或Behavior中的函数覆盖验证类方法

这是书中的相关链接。

很高兴您似乎找到了问题您似乎找到了问题
url($check, $strict = false)