我找到了从控制器手动失效的解决方法。在这个问题上阅读了很多我发现 save() 函数没有考虑通过在控制器中调用的 invalidate() 函数设置的失效,但是(这非常重要)如果它是直接从模型函数调用 beforeValidate () 它运行良好。
所以我建议进入 AppModel.php 文件并创建下一个公共方法:
public $invalidatesFromController = array();
public function beforeValidate($options = array()) {
foreach($this->invalidatesFromController as $item){
$this->invalidate($item['fieldName'], $item['errorMessage'], true);
}
return parent::beforeValidate($options);
}
public function invalidateField($fieldName, $errorMessage){
$this->invalidatesFromController[] = array(
'fieldName' => $fieldName,
'errorMessage' => $errorMessage
);
}
之后,确保您的模型的 beforeValidate() 函数调用了父模型的函数:
public function beforeValidate($options = array()) {
return parent::beforeValidate($options);
}
在使字段无效的控制器中,使用下一行:
$this->MyModel->invalidateField('fieldName', "error message");
希望能帮助到你!对我来说,它的工作!