2017-07-16 14 views
1

検証ルール:JSONの特定のフィールドYII2の属性とエラーメッセージを取得する方法

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のすべてのフィールドのすべてのフィールド、エラー、メッセージを正しく返すにはどうすればいいですか?

おかげ

答えて

0

あなたは
メッセージはusinng CONCAT試してみてください。唯一の最後のメッセージが表示されますので、あなたが同じインデックスには常に結果を割り当てる=

または異なる$ register_errorsに異なるメッセージを割り当て['メッセージ'] []

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