【问题标题】:(Yii2) RangeValidator validation correctness(Yii2) RangeValidator 验证正确性
【发布时间】:2023-03-29 09:50:01
【问题描述】:

在应用程序/模型/模型中 这验证了

//simulating incorrect user input
//$model->status='some-string';

public function rules()
{
    return [
        ['status', 'in', 'range' => [0]], //asserts true (why?)
      //['status', 'in', 'range' => [0], 'strict' => true], //asserts false (correct)

    ];
}

编辑:我更新了这个问题以反映新的见解。

【问题讨论】:

  • 经过测试,可以使用常量。
  • 似乎问题不在此代码中
  • 嗯,似乎如果 $model->status 输入为“some-string”,验证器将断言等于 0,除非使用严格模式。所以问题不在于常数,而在于比较本身。

标签: validation model yii2


【解决方案1】:

请确保您在模型类中定义了常量

 class model extends activeRecord {
const STATUS = 0;
public function rules()
{
    return [
        [['status'], 'in', 'range' => [self::STATUS]],
    ];
}
}

试试这个对我有用.....

【讨论】:

    【解决方案2】:

    验证时状态很可能为空,内部检查计算如下:

    // non-strict:
    null == 0  // this is true
    
    // strict:
    null === 0 // this is false
    

    同样适用于空字符串,参见related question

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      相关资源
      最近更新 更多