Я играл с Yii2, и я застрял в правилах. Функциональность, которую я пытаюсь достичь:
Пользователю предоставляется форма, в которой он может добавлять баллы к различной статистике. Однако у него есть только ограниченное количество очков, которые он может добавить. Как и почти в любой ролевой игре, где вы можете увеличить некоторые характеристики при повышении уровня.
Например, у нас есть такая статистика: strength
, agility
, vitality
, и пользователь может добавить до 3 баллов. Как мне сделать правила, чтобы они позволяли добавлять максимум 3 балла, но как только 3 балла используются, они отказываются добавлять больше?
Таким образом, если он добавляет 3 балла к strength
, максимум для agility
и vitality
равен 0. Или, если он добавляет 2 балла к strength
, максимум для agility
и 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;
}