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

Php 如何获取JSON中特定字段YII2的属性和错误消息,php,json,yii2,yii2-basic-app,Php,Json,Yii2,Yii2 Basic App,验证规则: public function rules() { return [ [['name', 'email', 'password'], 'required'], [['email'], 'unique'], [['password'],'string', 'min' => 6], ]; } 情景 public function signup() { if (!$this->validate(array('name'))

验证规则:

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');
   }
}
返回值

if (!$this->validate) {
   $register_errors['error'] = true;
   return json_encode($register_errors);
}
结果: 总是回来

{"field":["Email cannot be blank."],"message":[],"error":true}
如何正确返回JSON中每个字段的所有字段、错误和消息


谢谢

您总是将结果分配到同一个索引,这样您只会收到最后一条消息
请尝试使用concat查看消息

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\u 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']);

您总是将结果分配给相同的索引,这样您只会得到最后一条消息
请尝试使用concat查看消息

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\u 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']);