2012-03-05 2 views
0

私はZend_Formをフォームの処理に使用していますが、ローカリゼーションに問題があります。Zend_Formと浮動小数点数のローカライゼーション

私は以下の使用フィールド宣言:

$this->addElement('text', 'area', array(
     'label' => 'Area:', 
     'required' => true, 
     'filters' => array('StringTrim', 'NormalizedToLocalized') 
    )); 

問題がある、私はpl_PLのロケールを使用して、この中に「」小数点区切りがあるロケールではありません「」。しかし、データベース(MySQL)は "。"セパレータ。

NormalizedToLocalizedを追加しました。私のHTML形式で40,12に40.12。

POSTリクエストで40,12を渡すとき、私はZend_Formが自動的に値40,12を40.12に変換してDBに渡せるようにします(私は$ form-> getValues()メソッドを使ってフォームから値を集めます) 。これで、40,12が正常にレンダリングされますが、$ form-> getValues()では正規化された値ではなく、ローカライズされます。

私の質問は、Zend Frameworkでフィールドのレンダリングと値を取得するために別のフィルタを作成できるかどうかです。

ご協力いただきありがとうございます。

答えて

2

フォームが送信されるまで、フィルタは適用されません。フォームが投稿されるまで、'NormalizedToLocalized'は効果がありません。したがって、保存するデータに小数点を入れ、カンマではない場合は、フォームからフィルタを削除(または'LocalizedToNormalized')し、表示する必要があるデータについてはZend_Filterを使用してフィルタを適用します。
このフィールドに常に浮動小数点型が必要な場合は、validatorを使用して値を適用し、そのフィルタを使用してデータベースの書式設定を強制できます。

+0

これはフォーム間で動作しますが、データが表示されている場合(たとえば、編集や他のフィールドが検証されないためにフォームが再表示されるなど)、正規化された状態で表示されます。 – tihe

+0

あなたはどのデータセットを使用しているのかを意識する必要があります。フィルタは '$ form-> getValues()'またはそれに類するものを介して通常アクセスするフォーム要素値にのみ適用されますが、通常は戻されるデータセットである$ _POST配列に通常は適用されません検証に失敗した後のフォームに追加します。他のデータとフォームデータに適用されるフィルタが必要な場合は、そのデータを 'Zend_Filter_Input'を通して渡す必要があります。 – RockyFord

+0

array( 'StringTrim'、 'LocalizedToNormalized')を再ポピュレートして '' filters '=' ''を使用して、検証が失敗した後、私のローカライズされた入力(、)を正規化したもの)。 getPost()は$ _POST配列を取得しませんか? – tihe

0

私はZend Frameworkに精通していませんが、フィルタ名は探していますが、'LocalizedToNormalized'であってはいけませんか?

関連する問題