0

私は 2.4.7 を使用しており、価格を取得する 2 つのフィールド (例: €3 の場合は €1 または 2) の検証を含めたいと考えています。当初は、おそらくユーザー入力の検証に頼る必要があると思っていましたが、答えが示すように、それはデータベースの問題でした.

SilverStripe 内のエンコードは、ユーロ記号などの記号を変換する ASCII にデフォルト設定されていました。最後に追加する必要があります

$this->response->addHeader("Content-Type", "application/json; charset='utf-8'");

コントローラの init メソッドに。これにより、エンコーディングの問題が修正され、ハッキーな回避策が実行されるのを防ぎました。これについての洞察に感謝します。

ありがとう

4

2 に答える 2

2

CMSでこれを行いたいと思います。その場合、おそらく最も簡単な方法は、クラスを拡張し、検証を実行するメソッドをTextField追加する新しいクラスを作成することです (例については、 CreditCardField クラスを参照してください)。public function validate()

class FancyCurrencyField extends TextField {
    public function validate($validator) {
        // Do your validation
        if ($invalid) {
            $validator->validationError(
                $this->name,
                "Please don't use currency symbols.",
                "validation",
                false
            );
            return false;
        }
        return true;
    }
}

クラスを作成したら、getCMSFields()関数のフォーム フィールドを変更しDataObjectて、新しいクラスを の代わりに使用できますTextField

そうは言っても、入力検証ではなく出力エンコーディングが問題の根本原因であるように感じます。すべてが UTF-8 を使用するように設定されていることを確認します。

于 2012-10-24T10:05:36.743 に答える