如何在 JSON 中获取特定字段 YII2 的属性和错误消息

How to get Attribute and Error Message on Specific Field YII2 in JSON

验证规则:

public function rules()
{
   return [
      [['name', 'email', 'password'], 'required'],
      [['email'], 'unique'],
      [['password'],'string', 'min' => 6],
   ];
}

场景

public function signup() {
   if (!$this->validate(array('name')) {
      $register_errors['field'] = 'name';
      $register_errors['message'] = $this->getErrors('name');
   }

   if (!$this->validate(array('email')) {
      $register_errors['field'] = 'email';
      $register_errors['message'] = $this->getErrors('email');
   }

   if (!$this->validate(array('password')) {
      $register_errors['field'] = 'password';
      $register_errors['message'] = $this->getErrors('password');
   }
}

Return值

if (!$this->validate) {
   $register_errors['error'] = true;
   return json_encode($register_errors);
}

结果: 总是 return

{"field":["Email cannot be blank."],"message":[],"error":true}

如何正确return JSON中每个字段的所有字段、错误和消息?

谢谢

您始终将结果分配给相同的索引,因此您只会收到最后一条消息
尝试使用 .=

连接消息
public function signup() {
   if (!$this->validate(array('name')) {
      $register_errors['field'] = 'name';
      $register_errors['message'] = $this->getErrors('name');
   }

   if (!$this->validate(array('email')) {
      $register_errors['field'] = 'email';
      $register_errors['message'] .= $this->getErrors('email');
   }

   if (!$this->validate(array('password')) {
      $register_errors['field'] = 'password';
      $register_errors['message'] .= $this->getErrors('password');
   }
}

或将不同的消息分配给不同的 $register_errors['message'][]

public function signup() {
   if (!$this->validate(array('name')) {
      $register_errors['field'] = 'name';
      $register_errors['message'][] = $this->getErrors('name');
   }

   if (!$this->validate(array('email')) {
      $register_errors['field'] = 'email';
      $register_errors['message'][] = $this->getErrors('email');
   }

   if (!$this->validate(array('password')) {
      $register_errors['field'] = 'password';
      $register_errors['message'][] = $this->getErrors('password');
   }
}

var_dump(  $register_errors['message']);