2

Yii 2 양식에서 작업 중이며 클라이언트 측 유효성 검사에 실패 할 경우 모델을 다시 초기화하고 싶습니다. 예를 들어 다음과 같은 특정 규칙이있는 경우 :Yii 2에서 클라이언트 측 유효성 검사가 실패 할 때 모델을 다시 초기화하는 방법은 무엇입니까?

public function rules() 
{ 
    return [ 
     [['username'], 'required', 'message' => 'You must enter your username'], 
     ['username','email'], 
     [['password'], 'required', 'message' => 'You must enter your password'],   
    ]; 
} 

유효성 검사가 실패하면 모든 필드가 비어 있어야합니다 (예 : 잘못된 이메일 주소를 입력 한 경우). 어떻게해야합니까?

답변

2

난 당신이 모델을로드하는 표준 YII이 방법을 사용하는 가정

$model = new SomeModel(); 
if ($model->load(\Yii::$app->request->post()) && $model->save()) { 
    // ... 
} 
return $this->render('view', ['model' => $model]); 

설정 필드를 null에 검증이 실패했을 경우. 모든 유효성 검사 메시지를 잃어 버리기 때문에 새 인스턴스를 만들고 싶지 않습니다.

$model = new SomeModel(); 
if ($model->load(\Yii::$app->request->post())) { 
    if ($model->save()) { 
     // .... 
    } else { 
     $model->username = null; 
     $model->password = null; 
    } 
} 
return $this->render('view', ['model' => $model]); 

UPDATE : 클라이언트 측의 검증이이 관점에서 코드 JS 추가

$("#form-ID").on("afterValidateAttribute", function (event, attribute, messages) { 
    if (event.result === false) { 
     attribute.value = ""; 
    } 
}); 

적절한 폼 요소 JS 식별자 #form-ID 바꾸기.

+0

예 저는 이미 그렇게하고 있습니다. 그러나 이것은 게시 한 후 페이지가 새로 고침되지 않는 이유를 묻는 이유입니다. – praba

+0

내 대답보기 업데이트. – Bizley

+0

나는 afterValidateAttribute 대신에 afterValidate를 사용하고있다. 잘 작동하고있어 나에게 또 다른 생각을하고있다. 정말 감사한다. –