Weryfikacja niestandardowa CakePHP ze zmienną w komunikacie o błędzie

Dzień dobry.

Mam model, który ma pole o nazwie „procent”. Wszystkie podobne modele nie mogą mieć swoich wartości procentowych sumujących się więcej niż 100%. Sprawdzanie tego jest obsługiwane podczas walidacji.

Potrzebuję komunikatu o błędzie walidacji, aby powiedzieć, ile procentu „pokoju” pozostawił użytkownik. Na przykład, jeśli wszystkie MyModele mają już łącznie 80%, a użytkownik próbuje utworzyć nowy MyModel z procentem 40%, komunikat o błędzie powiedziałby: „Twój procent jest za wysoki. Pozostało ci tylko 20%”.

Problem polega na tym, że nie wiem, jak umieścić zmienną w komunikacie o błędzie sprawdzania poprawności.

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

Próbowałem :

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

ale ustawiony tutaj element wiadomości nie zastępuje oryginalnej wiadomości - komunikat o błędzie pozostaje „foo”. Próbowałem usunąć element wiadomości z tablicy $ validation array, ale domyślnie jest to nazwa nadrzędna, tj. „Procent”. Próbowałem:

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

przed ustawieniem komunikatu sprawdzania poprawności, ale wynik jest taki sam.

Czy ktoś wie, jak zwrócić zmienną w komunikacie o błędzie sprawdzania poprawności? Wielkie dzięki.

questionAnswers(1)

yourAnswerToTheQuestion