Yii2调整规则
Yii2 adjusting rules
我一直在玩 Yii2,我被规则所困。
我想要实现的功能:
用户会看到一个表单,他可以在其中向不同的统计数据添加分数。但是,他能加的点数有限。就像在几乎所有角色扮演游戏中一样,你可以在升级时增加一些统计数据。
例如,我们有这些统计数据:
strength
、agility
、vitality
,用户最多可以加3分。
我怎么制定规则,他们允许最多加3分,但是一旦用完3分,他们就拒绝再加了?
所以如果他在 strength
上加 3 分,agility
和 vitality
的最大值是 0。或者如果他在 strength
上加 2 分,那么 strength
的最大值agility
和 vitality
是 1,但是一旦他加上一分,剩下的就变成 0?
编辑:
我目前正在玩类似的东西:
["strength", "integer", "min" => 0 , "max" => $free_points, "when" => function($model) {
return $model->vitality == 0 && $model->agility == 0}],
目前我的问题是做一个适配免费点数的版本。
编辑2:
我正在尝试编写自定义验证器。我找不到的是如何从表格中获取价值......
我的非工作代码(一些变量的命名只是为了展示我想要实现的目标):
public function validatePoints($attribute, $params)
{
$free_points = Technology::findOne(Yii::$app->user->identity->technology)->free_points;
$used_points = 0;
foreach($params as $value){
$used_points += $value;
}
if(($assigned_points + $used_points) > $free_points){
$this->addError($attribute, Yii::t('user', "You can not use more points than you have free points."));
return false;
}
return true;
}
你在模型中写了这个,所以这个函数已经知道它的对象。要访问输入的 $strength
,您只需使用 $this->strength
等
现在你有很多像 $parameter
这样的东西,我不知道它是什么,所以你必须自己解决。
如果我理解正确,你可以做类似
的事情
foreach(['vitality', 'agility', 'strength'] as $parameter){
$used_points += $this->{$parameter};
}
同样不知道 $assigned_points
的来源,如果它是模型的 属性,您可能必须使用 $this->assigned_points
。
我一直在玩 Yii2,我被规则所困。 我想要实现的功能:
用户会看到一个表单,他可以在其中向不同的统计数据添加分数。但是,他能加的点数有限。就像在几乎所有角色扮演游戏中一样,你可以在升级时增加一些统计数据。
例如,我们有这些统计数据:
strength
、agility
、vitality
,用户最多可以加3分。
我怎么制定规则,他们允许最多加3分,但是一旦用完3分,他们就拒绝再加了?
所以如果他在 strength
上加 3 分,agility
和 vitality
的最大值是 0。或者如果他在 strength
上加 2 分,那么 strength
的最大值agility
和 vitality
是 1,但是一旦他加上一分,剩下的就变成 0?
编辑: 我目前正在玩类似的东西:
["strength", "integer", "min" => 0 , "max" => $free_points, "when" => function($model) {
return $model->vitality == 0 && $model->agility == 0}],
目前我的问题是做一个适配免费点数的版本。
编辑2: 我正在尝试编写自定义验证器。我找不到的是如何从表格中获取价值...... 我的非工作代码(一些变量的命名只是为了展示我想要实现的目标):
public function validatePoints($attribute, $params)
{
$free_points = Technology::findOne(Yii::$app->user->identity->technology)->free_points;
$used_points = 0;
foreach($params as $value){
$used_points += $value;
}
if(($assigned_points + $used_points) > $free_points){
$this->addError($attribute, Yii::t('user', "You can not use more points than you have free points."));
return false;
}
return true;
}
你在模型中写了这个,所以这个函数已经知道它的对象。要访问输入的 $strength
,您只需使用 $this->strength
等
现在你有很多像 $parameter
这样的东西,我不知道它是什么,所以你必须自己解决。
如果我理解正确,你可以做类似
的事情foreach(['vitality', 'agility', 'strength'] as $parameter){
$used_points += $this->{$parameter};
}
同样不知道 $assigned_points
的来源,如果它是模型的 属性,您可能必须使用 $this->assigned_points
。