原因就在于在处理评论内容时使用的验证规则为
protected $_validate = array(
array('content','require','评论内容必须!'),
);
这样似乎没问题,但是如果仔细检查框架源码,就会发现require的正则规则是'require'=> '/.+/',也就是匹配除换行之外的任意字符,当然空格之类的也可以了。那么就来修改。
本来我是想着用自动完成来去掉空字符,在进行验证。但是再看下源码,执行流程是先进行验证在自动完成。
而且create方法是直接接收的$_POST数组,由于前端是不可信的,那只能在后端进行操作。
剩下的有两种可行的方法:
1,修改框架Model.class.php的源码,将require的正则改为
'require'=> '/\S+/'
匹配一个或多个非空字符2,或者将自动验证改成自定义方法,自己来验证
当然推荐使用第二种方法,因为有时我们确实需要接收空字符等特殊要求
总结:大家使用自动验证的非空检查时,先想想是否需要严格验证空字符,然后选择合适的验证方法。另外,如果表单传过来checkbox值的话,可不能用require来验证,因为传过来的可是一个数组。
最佳答案
