了解Yii2“范围”验证规则

时间:2018-06-16 08:22:12

标签: yii2 yii2-user yii2-validation

我是Yii2 Framework的新手,我需要了解用户状态。我需要创建一个为用户分配许多状态的应用程序,而Yii2只提供了2个。在Yii2 common\models\Users中有两个常量:STATUS_DELETED = 0;STATUS_ACTIVE = 10;。有一段代码可以将状态值的范围限制为0-10,即STATUS_DELETEDSTATUS_ACTIVE。如果我需要在STATUS_DISABLED = 20部分中添加rules()等其他状态,如何修改此块?我是否需要删除STATUS_ACTIVE并将其替换为STATUS_DISABLED,或者我应该将STATUS_DISABLED的值限制在0-10范围内。我该如何工作?我不明白这一部分。

class User extends ActiveRecord implements IdentityInterface
{
    const STATUS_DELETED = 0;
    const STATUS_ACTIVE = 10;
    const STATUS_DISABLED = 20; // I want to add this


    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%user}}';
    }

    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            TimestampBehavior::className(),
        ];
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            ['status', 'default', 'value' => self::STATUS_ACTIVE],
            ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],
        ];
    }

}

1 个答案:

答案 0 :(得分:1)

$range应该包含有效值的数组,而不是“ A和B之间”含义的实际范围。所以这个:

['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],

表示status应该是0 10。例如5将不是有效值。您可以将任意数量的值添加到range数组中,如下所示:

[
    'status', 'in', 
    'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED, self::STATUS_DISABLED]
],