Validação personalizada do CakePHP com uma variável na mensagem de erro

Boa tarde.

Eu tenho um modelo que tem um campo chamado "porcentagem". Todos os modelos similares não podem ter suas porcentagens acima de 100%. Verificar isso é tratado durante a validação.

Eu preciso da mensagem de erro de validação para dizer quanto à "sala" de porcentagem que o usuário deixou. Por exemplo, se todos os MyModels já tiverem um total de 80% e o usuário tentar criar um novo MyModel com uma porcentagem de 40%, a mensagem de erro diria "Sua porcentagem é muito alta. Você só tem 20% restantes".

O problema é que eu não sei como colocar uma variável em uma mensagem de erro de validação.

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

Eu tentei :

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

mas o elemento de mensagem definido aqui não substitui a mensagem original - a mensagem de erro permanece 'foo'. Eu tentei remover o elemento de mensagem do array $ validation, mas o padrão é o nome pai, ou seja, 'percentage'. Eu tentei:

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

antes de definir a mensagem de validação, mas o resultado é o mesmo.

Alguém sabe como retornar uma variável em uma mensagem de erro de validação? Muito obrigado.

questionAnswers(1)

yourAnswerToTheQuestion