2017-10-13 2 views
-1

내 모델에는 레코드를 만들 때 양식 유효성 검사를하기 전에 현재 사용자 로그인으로 대체해야하는 "authorname"필드가 있습니다.Yii2는 유효성 검사 전에 필드 데이터를 계산합니다

좋아, 나는 적절한 컨트롤러에 쓴 :

public function beforeValidate() { 
    if($this->isNewRecord) { 
     $this->authorname = Yii::$app->user->identity->username; 
    } 
    return parent::beforeValidate(); 
} 

그것은 작동 - 필요 형태로 계산 된 필드를 표시하지 않으려면 substituion 잘 작동합니다.

데이터 그리드 위의 검색 문자열에도 $ this-> isNewRecord = true가 있으며 전체 데이터 배열을 사용자 이름별로 필터링합니다. Yii2를 적용하는 방법은 검색 레코드를 새 레코드로 평가하지 않습니까? 또는 실제로 삽입 된 데이터와 가상적으로 삽입 된 검색 행의 차이를 얻기 위해 beforeValidate() 함수를 작성하는 방법은 무엇입니까?

+0

왜 당신이 규칙에 현재 사용자 이름에'authorname'에 대한 기본 값을 설정하지? 'beforeValidate()'보다 쉽습니다. 나는 네 usecase 모르지만 간단하게 추측한다. –

+0

beforeValidate 대신 beforeSave를 사용해야합니다. – nicolascolman

+0

@nicolascolman 저장하기 전에 비어있는 필드가 유효성을 검사하지 않습니다. 따라서 beforeSave를 다시 작성하십시오 - 너무 늦었습니다. –

답변

-1

는 SearchModel에서 줄을 제거 :

andFilterWhere(['like', 'authorname', $this-> authorname]) 

또는

'authorname' => $this->authorname, 
+0

100 %는 아니지만 제 경우에는 충분합니다. –