Yii2:使用OR无效的多个属性的自定义验证

Ion*_*ian 1 php yii2

我正在尝试编写一个规则来验证是否设置了attribute_a或attribute_b;

必须设置以下属性之一:licitatii_publicelicitatiile_atribuite

以下代码不起作用;

<?php

namespace common\models;

use yii\base\Model;

class AbonamentValidare extends Model {

    public $licitatii_publice;
    public $licitatiile_atribuite;
    public $zone;
    public $judete;
    public $tari;
    public static $targetAttribute = [];

    public function rules() {
        return [
            [['zone'], 'required'],
            [['licitatii_publice', 'licitatiile_atribuite', 'tari', 'judete'], 'safe'],
            ['licitatii_publice', 'validate_tip_licitatie', 'targetAttribute' => ['licitatii_publice', 'licitatiile_atribuite']],
        ];
    }

    function validate_tip_licitatie($attribute, $param) {
        print_r($attribute);
        $this->addError($attribute, 'eroarea');
    }

    public function attributeLabels() {
        return array(
            'licitatii_publice' => 'lp',
            'licitatiile_atribite' => 'la',
            'tari' => 'tari',
            'judete' => 'judete',
            'zone' => 'zone',
        );
    }

    public function save() {
        return false;
    }

}

?>
Run Code Online (Sandbox Code Playgroud)

小智 6

只想更新Yii2案例的答案.
在Yii2中,验证器具有skipOnEmpty默认设置为的属性true.这意味着如果字段为空,则不会调用自定义验证器,这可能不是必需的行为,尤其是在这种情况下,其中一个属性是必需的.为了解决这个问题,我们需要将其设置skipOnEmpty为false,如下所示.

[['licitatii_publice, licitatiile_atribuite'], 'validate_tip_licitatie', 'skipOnEmpty'=> false],
Run Code Online (Sandbox Code Playgroud)