こんにちは。
「パーセンテージ」というフィールドを持つモデルがあります。同様のモデルはすべて、パーセンテージの合計が 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']);
検証メッセージを設定する前ですが、結果は同じです。
検証エラー メッセージで変数を返す方法を知っている人はいますか? どうもありがとう。