Validation Rule :
public function rules()
{
return [
[['name', 'email', 'password'], 'required'],
[['email'], 'unique'],
[['password'],'string', 'min' => 6],
];
}
Scenario
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 value
if (!$this->validate) {
$register_errors['error'] = true;
return json_encode($register_errors);
}
Result : always return
{"field":["Email cannot be blank."],"message":[],"error":true}
How to properly return all field, error, and message of every field in JSON?
Thanks
You assign the result always to the same index so you get only the last message
Try concat the message usinng .=
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');
}
}
or assign the different message to different $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']);