我的问题与HTML5和模型验证的冲突有关。
我今天花了将近4个小时试图弄清楚为什么我的验证功能在cakephp中没有工作,只是得出结论是因为浏览器验证妨碍了。
一旦我弄清楚发生了什么,我就可以通过表单开始标记中的novalidate关闭浏览器验证
$this->Form->create('Model', array('novalidate' => true));
这对于关闭浏览器验证效果很好,但它似乎也关闭了cakephp验证,因为当我提交表单时,它经过而没有停止。除非我设置'required'=> true和'allowEmpty'=> false然后它停止它并在输入框下面给我错误消息,就像我预期的那样。事情是这两个必须开启并为notEmpty工作设置这种方式。问题是它看起来仍然不像其他内置函数一样工作。例如,我试图将我的信用卡验证更改为cc,并且不会停止提交表单。
'card_num' => array(
'rule' => array('cc', 'all', true), // set the $deep to true to check the luhn algorithm
'message' => 'Invalid CC Number',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
)
我是否遗漏了一些可以让蛋糕进行模型验证并且没有让浏览器验证受阻的东西?我真的很喜欢蛋糕验证,因为它非常强大和可扩展,但在我看来,由于基于浏览器的验证,所有这些稳健性和可扩展性现在都已消失。我能做些什么来使这两者一起工作?
编辑: 我还想扩展我对验证功能的评论。我有一些字段只有在选择某个单选按钮时才需要。所以我有自己的功能来控制它,现在我在函数中唯一做的就是返回false;因此,使用此函数的3个输入字段应该在我的文本框下面放置一条错误消息,但它们不是。这就是我写这篇文章的原因,因为它似乎不能设置任何类型的自定义验证,因为我必须关闭表单上的验证。
感谢您的帮助。 杰米