问题描述
在我的控制器中,我要保存一个密码实体,然后在保存之前更新该实体中的日期字段。我创建了一个验证规则作为应用程序规则,如此处https://book.cakephp.org/4/en/orm/validation.html#using-validation-as-application-rules所述,用于在使用自定义功能修改实体后验证该实体。
不幸的是,它两次验证。上一次修补后,第一次按预期方式工作,但是第二次失败,因为所有字段均未包含在发送给ruleschecker的实体中。实体中发送给ruleschecker的唯一字段是我最近更新的两个日期字段。如何将实体中的所有字段重新发送到ruleschecker?或强行将修补性验证中的错误显示在保存时。
CONTROLLER
$password = $this->Passwords->patchEntity($password,$this->request->getData());
// Convert Dates to sql format
$password->effective_on = strftime('%Y-%m-%d %H:%M:%s',strtotime($this->request->getData('effective_on')));
$password->effective_until = strftime('%Y-%m-%d %H:%M:%s',strtotime($this->request->getData('effective_until')));
if (! $this->Passwords->save($password)) {
...
规则
public function buildrules(RulesChecker $rules): RulesChecker
{
$rules->add($rules->existsIn(['user_id'],'Users'));
$rules->add($rules->existsIn(['environment_id'],'Environments'));
$rules->add($rules->existsIn(['rule_type_id'],'RuleTypes'));
// Add validation rules
$rules->add(function($entity) {
$data = $entity->extract($this->getSchema()->columns(),true);
$validator = $this->getValidator('default');
$errors = $validator->validate($data,$entity->isNew());
$entity->setErrors($errors);
return empty($errors);
});
return $rules;
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)