Validation cakePHP:如何在控制器中手动设置输入字段的错误验证

Validation cakePHP:如何在控制器中手动设置输入字段的错误验证,validation,cakephp,cakephp-1.3,Validation,Cakephp,Cakephp 1.3,我想在控制器中手动将错误验证设置为输入字段 例如: if($remainTimevalidationErrors['limitTime']=“时间小于30”; } 这可以通过使用将字段标记为有错误的invalidate方法来实现:- $this->Model->invalidate('field_name', 'error message'); 由于已经回答了很多问题,为了传递正确的信息,您需要这样说: $this->Model->validationErrors['l

我想在控制器中手动将错误验证设置为输入字段 例如:

if($remainTime<30){
..…在此设置错误验证(错误:limitTime),(错误不在模型中)
}
其他问题:我想问: bindModel(在本例中,我在行为中使用bindModel)将导致与其他模型失去关系
但是bindModel是否也会导致$var validate的丢失?

可能您正在寻找一些东西

如果在模型中定义了$validate,bindModel不会导致$var validate的丢失

至于你的首要问题;您可以设置/取消设置/更新模型的$validationErrors..eg

($remainTime < 30) {
   $this->Model->validationErrors['limitTime'] = "time is less than 30";
}
($remainTime<30){
$this->Model->validationErrors['limitTime']=“时间小于30”;
}

这可以通过使用将字段标记为有错误的invalidate方法来实现:-

$this->Model->invalidate('field_name', 'error message');

由于已经回答了很多问题,为了传递正确的信息,您需要这样说:

$this->Model->validationErrors['limitTime'] = array("time is less than 30");
$this->Model1->Model2->invalidate('Model2', __("Your validation message"));

表单需要一个错误消息数组。

如果要使关联模型无效,可以使用以下方法:

$this->Model->validationErrors['limitTime'] = array("time is less than 30");
$this->Model1->Model2->invalidate('Model2', __("Your validation message"));
在我的例子中,它使关联的选择多个(HABTM)字段无效。

2019年CakePHP3的更新 在
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');

如果表单基于表,首先需要使用架构定义创建
src/form/YourForm.php
,然后从controller调用
YourForm
实例上的
setErrors()

否,我需要设置错误验证,在这种情况下,$validate==null是否要使字段无效,或者只是为了表明表单通常是无效的?对于Cake 2.0,这是我的诀窍。这可能是更正确的答案,因为它调用了Validator方法,该方法所做的事情与当前接受的答案几乎相同。请参阅此处的2.6 API文档:@neobie这是使CakePHP 2.x中的字段无效的正确方法。如果这对您不起作用,则可能是您做了其他错误。请注意,标准验证器会重置验证消息,因此如果您执行进一步的验证,则
invalidate()
结果将被销毁。