0

フィールドにゼロ以外の価格が設定されていることを確認するためのカスタム検証ルールがあります。ユーザーがドル記号などを入力できないようにするために、フィールドにプレースホルダー (0.00) があります。ただし、ゼロ以外のエントリの検証に行くと$this->data[$this->alias]['price']、テストでは「0.00」ですが、検証は機能しています-無効になります。しかし、1000.00 を入れると、それも無効になります。

私が見つけられないことの1つは、フィールドを無効にするためにカスタム検証フィールドから何/どのように返すかです。現在、コードは次のとおりです。

public function notZeroPrice($check){
    if ($check == '0.00')
        return true;

    return false;
}

ドキュメントはどちらの構造についても明確ではありません$check

4

1 に答える 1

3

検証された場合は、trueを返します。そうでない場合は、falseを返します。

ただし、そもそも検証方法に欠陥があります。$checkデバッグする場合は配列であるため、メソッドは常にfalseを返します。次に、「0.00」だけでなく、0より大きいかどうかをテストします。2つの文字列を比較するので、どちらも機能しません。

代わりに、値が0(int)より大きい場合はtrueを返します。array_shift($check);を使用すると、配列から値を簡単に取得できます。

return array_shift($check) > 0; // or something similar.

'rule' => array('comparison', '>', 0),コア検証を回避することもできます。

(私は、価格がゼロでないことは、負の価格でもないことを意味すると仮定しています)

于 2012-08-20T02:39:11.393 に答える