6

こんにちは。

「パーセンテージ」というフィールドを持つモデルがあります。同様のモデルはすべて、パーセンテージの合計が 100% を超えることはできません。これの確認は、検証中に処理されます。

ユーザーが残した「余裕」の割合を示す検証エラー メッセージが必要です。たとえば、すべての MyModel の合計が既に 80% で、ユーザーが 40% のパーセンテージで新しい MyModel を作成しようとすると、「あなたのパーセンテージが高すぎます。残り 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']);

検証メッセージを設定する前ですが、結果は同じです。

検証エラー メッセージで変数を返す方法を知っている人はいますか? どうもありがとう。

4

1 に答える 1

9

それは実際にはかなり簡単です。エラー文字列を返すだけです!

return 'You have ' . ...;
于 2012-08-18T00:08:34.393 に答える