发送到规则检查器的实体不包括所有字段

问题描述

在我的控制器中,我要保存一个密码实体,然后在保存之前更新该实体中的日期字段。我创建了一个验证规则作为应用程序规则,如此处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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...