Пользовательская проверка CakePHP с переменной в сообщении об ошибке

Добрый день.

У меня есть модель, в которой есть поле под названием «процент». Все подобные Модели не могут иметь суммарные проценты, превышающие 100%. Проверка этого выполняется во время проверки.

Мне нужно сообщение об ошибке проверки, чтобы сказать, сколько процентов «комнаты» осталось у пользователя. Например, если все MyModels уже имеют в общей сложности 80%, а пользователь пытается создать новую MyModel с процентом 40%, в сообщении об ошибке будет сказано: «Ваш процент слишком высок. У вас осталось только 20%».

Проблема в том, что я не знаю, как поместить переменную в сообщение об ошибке проверки.

В MyModel.php:

public $validate = array(
    'percentage' => array(
        'rule' => array('confirmValidPercentage', 'percentage'),
        'message' => 'foo',
        'required' => true,
    ),
);

public function confirmValidPercentage($data) {
    $percentage = floatval($data['percentage']);

    $total = 0.00;
    $weights = $this->find('all', array('recursive'=>-1));
    foreach ($weights as $weight) {
        $total += floatval($weight[$this->name]['percentage']);
    }

    if ($total + $percentage > 100) {
        // handle the error variable here
        return false;
    }
    else {
        return true;
    }
}

Я пробовал:

$this->validate['percentage']['message'] = 'You have '.(100-$total).'% remaining';

но установленный здесь элемент сообщения не переопределяет исходное сообщение -, сообщение об ошибке остается «foo». Я попытался полностью удалить элемент сообщения из массива $validation, но по умолчанию используется родительское имя, то есть «процент». Я пытался:

unset($this->validate['percentage']['message']);

перед установкой сообщения проверки, но результат тот же.

Кто-нибудь знает, как вернуть переменную в сообщении об ошибке проверки? Большое спасибо.

6
задан user1449855 17 August 2012 в 23:48
поделиться