Yii2 Проверка пустого массива (пустой массив) - PullRequest
0 голосов
/ 26 июня 2018

У меня есть этот сценарий, где у меня есть форма следующим образом:

public $selling_price;
public $numbers;
public $inventory_factor;

public function rules() {
    return [
        ['selling_price'], 'integer'],
        [['inventory_factor'], 'safe'],
        ['numbers', 'each', 'rule' => ['integer']],
}

У меня есть последнее правило проверки, чтобы убедиться, что я получаю массив целых чисел. Это прекрасно работает, когда ввод является строкой, например. Это не работает, хотя, если массив [ноль] отправляется. Это например не выдает ошибок

{
  "selling_price": 2200,
  "numbers": [null]
}

Используя vardumper, дает массив чисел, равный

[
    0 => null
] 

Есть ли способ в Yii2, с помощью которого я могу либо удалить (отфильтровать) нулевые значения из массива перед запуском, либо проверить их тоже?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Посмотрев на специальную тему для основных валидаторов, я вижу, что под каждым валидатором он показывает:

rule: массив, определяющий правило валидации. Первый элемент в массиве указывает имя класса или псевдоним валидатора. Остальные пары имя-значение в массиве используются для настройки объекта валидатора.

Кроме того, для yii \ validators \ EachValidator, который расширяет yii \ validators \ Validator , он имеет свойство $skipOnEmpty, по умолчанию true:

$ skipOnEmpty публичная собственность - следует ли пропустить это правило проверки, если значение атрибута равно нулю или пустая строка.

public boolean $ skipOnEmpty = true

Таким образом, вам необходимо настроить ваше правило следующим образом.

['numbers', 'each', 'rule' => ['integer', 'skipOnEmpty' => false]],

Теперь ваш валидатор для numbers не будет закрывать глаза на пустые значения в массиве - если он найдет пустые или нецелочисленные значения, проверка не удастся.

0 голосов
/ 26 июня 2018

['numbers', 'integer', 'min' => 0]

Это подтвердит, что значение является целым числом больше 0, если оно не пустое. У обычных валидаторов $ skipOnEmpty установлено значение true.

Ссылка: https://www.yiiframework.com/doc/guide/2.0/en/input-validation

в этой теме фильтрации данных вы можете обратиться к этим

...