我已经设置了一些验证作为示例,检查控制器中所请求的帖子信息是否正确。只是一堆简单的验证,如minlength,notBlank等;这一切都有效。保存或更新时,某些字段不可用,我只想在请求中验证它们然后忘记它们。
例如,在更改密码时,当前,新密码和确认密码都在请求中提交,除了其他内容之外,它们都应该是必需的,但如果将它们设置为notBlank,则意味着它们位于用于更新的数据中,但是那里只需要新密码,而不再需要验证后的其他两个密码。
我知道我可以在我的控制器中调用验证的子集,但我也注意到验证看起来并不特定于特定的保存/更新,因此它们在模型范围内,所以看起来你可以&#39 ; t只是在请求保存/更新之外使用的验证。
有没有办法在CakePHP中执行此操作?希望这可以与Laravel的5.x请求类似。
答案 0 :(得分:2)
当然,您可以在不保存数据的情况下验证数据,然后在不验证的情况下保存数据。要验证使用Model :: validates()方法,例如:
print_xinfos(array_slice($xinfos,0,4));
print_posting();
print_xinfos(array_slice($xinfos,3,4));
function print_xinfos ($xinfos) {
foreach ($xinfos as $xinfo) {
foreach ($xinfo as $key => $value) {
if (is_numeric($value)) {
$value = (int) $value;
} else {
if (!is_array($value)) {
$value = (string) $value;
}
}
$$key = $value;
}
$previewurl = 'http://' . $xx_server . '/images/' . $id . '_1_' . $image_size . '.jpg';
$previewurl_2 = 'http://' . $xx_server . '/images/' . $id . '_2_' . $image_size . '.jpg';
echo ('<div style="width:16%; float: left;"><a href="http://' . $xx_url . '"> <img src="' . $previewurl . '" alt="' . $name . '"> </a></div>' . "\n");
}
}
无需验证即可保存数据
$this->YourModel->set($this->request->data);
if($this->YourModel->validates()){
//Logic if validation succeeded
}else{
//Logic if validation didn't succed
}
如果检查cakephp api,您可以看到save方法可以有三个参数,要保存的数据,要验证的字段或指示是否验证的布尔值,以及要保存的字段。 这里有更多信息CakePHP save method和CakePHP validation in Controller