2016-09-01 3 views
1

두 쌍의 입력 필드 중 하나만 필요합니다. 유효성 검사 권한을 얻을 수 없습니다.Yii2 유효성 확인시

listing_image_urlposter_image_url$model->listingImage이 null 인 경우에만 필요합니다.

또한 strlen($model->listingImage) == 0을 사용해 보았습니다.

 [['listing_image_url', 'poster_image_url'], 'required', 
      'when' => function($model){ 

       var_dump($model->listingImage); //result is empty string '0' 

       return $model->listingImage == NULL && $model->posterImage == NULL; 
      },'whenClient' => "function(attribute, value) { 
        return $('#vod-listingimage').val() == '' && $('#vod-posterimage').val() == ''; 
      }", 'message' => 'look' 
     ], 

위와 반대이지만 반대입니다.

[['listingImage', 'posterImage'], 'required', 
       'when' => function($model) { 
        return $model->listing_image_url == NULL && $model->poster_image_url == NULL; 
       }, 
       'whenClient' => "function(attribute, value) { 

        return $('#vod-listing_image_url').val() == '' && $('#vod-poster_image_url').val() == ''; 
       }", 'message' => 'hi' 
      ], 
+0

당신은 아마도 [진리표]를 사용하여 규칙을 명확히 수 (https://en.wikipedia.org/wiki/Truth_table)? 'poster_image'와'listing_image_url' 설정이 유효합니까? – topher

답변

1

이 같은 백엔드 측의 모델 검증을위한 자신의 inline validator을 만들 수 있습니다

[['listingImage', 'posterImage'], function($attribute, $params) { 
    if ($this->listingImage === null && empty($this->$attribute)) { 
      $this->addError($attribute, 'Can not be blank if listingImage is null'); 
    } 
}] 

을 또한 사용자 정의 standalone validator을 구축 할 수있는 클라이언트 측 유효성 검사를 제공하기 위해.

0

나는 비슷한 것을 시도했고 그 행동은 참으로 이상했다. 그러나 두 필드 중 하나만 선택되었는지 확인하는 유효성 검사기를 만들 수 있습니다. 규칙에

public function validateListingAgainstPoster($attribute, $params) 
{ 
    if (!empty($this->listing_image_url) && !empty($this->poster_image_url)) { 
     $this->addError($attribute, 'Only one of "Listing" or "Poster" fields can be selected.'); 
    } 
    if (empty($this->listing_image_url) && empty($this->poster_image_url)) { 
     $this->addError($attribute, 'Please select one of "Listing" or "Poster Group".'); 
    } 
} 

그리고 :

[['listing_image_url', 'poster_image_url'], 'validateListingAgainstPoster', 'skipOnEmpty' => false, 'skipOnError' => false], 
+0

사실 나는 그것을 작동 시켰습니다. @ nadar의 대답을 보면'==='NULL을 추가했는데 문제가 해결 된 것 같습니다. 좀 더 테스트를하고 돌아 오죠. – Ciprian

+0

아, 이거 멋지다! empty()를 사용해 보았습니다. 이 문제를 해결하려면 답변을 게시하십시오. –