在两对输入字段中,我只需要一个或另一个。我无法获得正确的验证。
仅当baz
为空时,才需要 listing_image_url
和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'
],
答案 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],