1

2 組の入力フィールドのうち、どちらか一方だけが必要です。検証を正しく行うことができません。

listing_image_urlが null の場合にposter_image_urlのみ必要です。$model->listingImage

も使ってみ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'
            ],
4

2 に答える 2

0

私は似たようなことを自分で試しましたが、動作は確かに奇妙です。ただし、2 つのフィールドのうち 1 つだけが選択されているかどうかをチェックするバリデーターを作成できます。

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],
于 2016-09-01T09:23:51.923 に答える