0

そのため、Zend Framework のフォームでフィルターを使用すると問題が発生します。

フォーム要素にフィルターを設定すると、要素に提供されるデータがあらゆる方法でフィルター処理されます。そのため、フォームで isValid() を呼び出すと、'Int' フィルターは文字列 "1" を int 1 に変換します。しかし、要素の値を文字列 "1" に設定すると、その値は引き続き次のように変換されます。 int 1。

その振る舞いは私に問題をもたらします。たとえば、企業のルールにより、すべての float 値を 100 倍してから db に保存する必要があります (うん、それは最悪です)。そのためのフィルターを作成すると、10 は 1000 になります。しかし、フォームに入力すると、1000 は 100000 になります。

モデルではなく、フォームだけでそれを行う方法が必要です。そこで、フィルターを呼び出すタイミングを指定するフラグを作成することを考えました。

それを行うより良い方法はありますか?私はそれを探し回ったことを誓いますが、何も見つかりませんでした。

ありがとう。

4

3 に答える 3

2

データベースにあるものとモデルにあるものは、モデル層の一部です。この場合、マッパーは変換を処理する必要があります。これをフォームに移動しないでください。これは実際にはビューレイヤーの一部であり、他の何よりも重要です。

于 2012-06-13T18:15:20.577 に答える
0

フォームでこの種のフィルタリングを本当に行いたい場合は、 Zend_Form_Element_* をいじる必要はまったくありません。フィルターのペアを書くだけです。Zend_Formは Zend_Filter から利用可能なフィルタを使用します。
Zend_filterには、Zend_Validate とまったく同じように、独自のフィルターを作成するための拡張可能なインターフェイスがあります。
フィルターを作成したら、必要な場所で使用できます。Zend_Form を使用して入力をフィルタリングし、モデルでデータをフィルタリングして元の状態に戻します。

幸運を。

于 2012-06-17T06:56:33.030 に答える
0

これを行う最善の方法は、フラグを設定し、getvalue と setvalue を拡張することだと思います。

setValue は常に 100 ごとに数値を割りますが、フラグ (フィルターを意味する) が存在する場合、getValue は常に数値を乗算します。

于 2012-06-13T18:34:36.667 に答える