Yii2验证时

时间:2016-09-01 08:50:25

标签: yii2 yii2-validation

在两对输入字段中,我只需要一个或另一个。我无法获得正确的验证。

仅当baz为空时,才需要

listing_image_urlposter_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'
        ],

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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],