【发布时间】:2018-06-25 03:59:10
【问题描述】:
我是 Yii2 框架的新手,我需要了解用户的状态。我需要创建一个为用户分配许多状态的应用程序,而 Yii2 只提供了 2 个状态。在 Yii2 common\models\Users 中有两个常量:STATUS_DELETED = 0; 和 STATUS_ACTIVE = 10;。有一段代码将status的取值范围限制为0-10,即STATUS_DELETED和STATUS_ACTIVE。如果我需要在rules() 部分添加其他状态,如STATUS_DISABLED = 20,我该如何修改这个块?我是否需要删除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]],
];
}
}
【问题讨论】:
-
您是否尝试将此新状态添加到规则:
['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED, self::STATUS_DISABLED]]?从您的示例来看,这是唯一可能禁止此状态的内容。 -
@ rob006 我的问题是我不确定是否要在规则中添加新状态,因为规则指定了一个范围,通常范围在两个数字之间。例如 0 t0 10、50 到 100 等,因此添加新状态将使其范围在 0、10 和 20 之间,这对我来说看起来很不合适和不正确,而不是在我问这个问题时
-
这不是“A 和 B 之间”含义的范围。这实际上用作“A 或 B 或 C 或 ...”,因此您可以使用任意数量的值,并且属性的值应与其中一个匹配以通过规则。
-
@rob006 现在我明白了,非常感谢您的帮助
-
@rob006 添加它作为答案,将来会帮助其他人
标签: yii2 yii2-user yii2-validation