Yii2调整规则

时间:2015-03-10 15:41:05

标签: php yii2 rules

我一直在和Yii2一起玩,而且我一直在遵守规则。 我想要实现的功能:

向用户显示一个表单,他可以在该表单中为不同的统计信息添加点数。但是,他只能提供有限的积分。几乎与任何角色扮演游戏一样,你可以在升级时增加一些统计数据。

例如我们有这些统计数据: strengthagilityvitality,用户最多可累加3分。 我如何制定规则,因此它们允许最多增加3个点,但一旦使用3个点,它们就会拒绝再添加?

因此,如果他向strength添加3分,agilityvitality的最大值为0.或者,如果他向strength添加2分,则agility的最大值1}}和vitality是1,但是一旦他添加了一个点,其余的就会变为0?

编辑: 我目前正在玩类似的东西:

["strength", "integer", "min" => 0 , "max" => $free_points, "when" => function($model) {
 return $model->vitality == 0 && $model->agility == 0}],

目前我的问题是将其变成一个能够适应自由点数量的版本。

EDIT2: 我正在尝试编写自定义验证器。我无法找到的是如何从表格中获取价值...... 我的非工作代码(一些变量的名称只是为了展示我想要实现的目标):

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;
}

1 个答案:

答案 0 :(得分:1)

你在模型中写了这个,所以这个函数已经知道了它的对象。要访问输入的$strength,您只需使用$this->strength

现在你有很多像$parameter这样的东西,我不知道它是什么,所以你必须自己解决这个问题。

如果我理解正确,你可以做点什么

foreach(['vitality', 'agility', 'strength'] as $parameter){
        $used_points += $this->{$parameter};
    }

再次不知道$assigned_points来自何处,如果它是模型的属性,则可能必须使用$this->assigned_points