我希望在控制器中手动输入字段设置错误验证 例如:
if ($remainTime < 30) {
..... set error validation in here (error: limitTime ), ( error is not in model )
}
其他问题:我想问: bindModel(在这种情况下,我在行为中使用bindModel)将导致与其他模型失去关系 但是bindModel是否导致$ var validate丢失?
答案 0 :(得分:15)
如果在模型中定义了$ validate,则bindModel不会导致$ var validate的closs。
至于你的主要问题;你可以设置/取消设置/更新模型的验证错误..eg
($remainTime < 30) {
$this->Model->validationErrors['limitTime'] = "time is less than 30";
}
答案 1 :(得分:15)
这可以使用invalidate方法来实现,该方法将字段标记为有错误: -
$this->Model->invalidate('field_name', 'error message');
答案 2 :(得分:1)
如果要使关联模型无效,可以使用以下内容:
$this->Model1->Model2->invalidate('Model2', __("Your validation message"));
在我的情况下,它会使关联的选择多个(HABTM)字段无效。
答案 3 :(得分:0)
可能你正在寻找like this
的东西答案 4 :(得分:0)
由于为了传递正确的信息已经回答了很多,你需要这样说:
$this->Model->validationErrors['limitTime'] = array("time is less than 30");
Form需要一系列错误消息。
答案 5 :(得分:0)
CakePHP3的2019更新
在YourController.php
// creane new
$entity = $this->YouTable->newEntity();
// or get existing from database
// $entity = $this->YouTable->get($id);
// invalidate fields
$entity->setErrors('your_field', 'error message');
$this->set('$entity', $entity);
和action.ctp
// create form based on your entity
echo $this->Form->create($entity);
// and include your control
echo $this->Form->control('your_field');
如果您的表单基于表格,并且首先针对modelless forms,您需要创建具有架构定义的src/Form/YourForm.php
,然后在控制器的setErrors()
实例上调用YourForm
。