0

重要な場合とそうでない場合があるいくつかの10進数型の列を含む、さまざまなタイプのさまざまな列を持つDBテーブルがあります。データベースからレコードを読み取り、error_log を介して、serialize($dbArray) を使用して結果の連想配列を出力すると、列に NULL 値が含まれていることを示す「N」があることがはっきりとわかります。これと同じ配列が $form->populate($dbArray) で使用され、フォームに「入力」されます。送信時に、serialize($dbArray) で error_log を再度使用すると、問題の列にシリアル化出力の値部分として「S(1):0」が含まれるようになりました。

これは私にとって問題です。その特定の要素に値を入力しない場合に合格すると予想されるgreaterThan 0のバリデーターが失敗するためです。要素は必須要素ではなく、何かが入力されたときにのみバリデーターを実行する必要があり、NULL が返されないため実行されます。どこかで NULL 値が 0 に変換され、その後 DB で 0.00 になります。

要素に何も入力されていないときに Form が NULL を返すようにするために何をする必要があるか考えてみてください。この性質のほとんどの要素に使用するタイプ「テキスト」として定義された要素があります。NULL として返される同じ DB レコードからの varchars があり、NULL 値を保持している日付列も思い出すと思います。これらは、フォームの「テキスト」要素でもあります。

明日また戻ってきて、さらにデバッグしますが、何が原因なのかについてのアイデアをいただければ幸いです。

4

1 に答える 1

0

これはフィルター (Zend_Filter) を使用して処理できることを発見し、現在処理中です。動作するようになったら、戻って詳細を指定します。失敗した場合は、別の質問になる可能性があります。

さて、フィルターが機能しました。基本的に、要素を定義した場所に追加するだけで済みました

->addFilter('Null')

これにより、getValue または getValues が空の文字列または 0 ではなく NULL を返すようになり、それがまさに私が必要としていたものです。このフィルターが NULL に変換する変数/列の型はいくつかあり、基本的には php の empty() 関数と同じように機能し、空が true を返す場合、このフィルターは NULL を返し、それ以外の場合は内容を返します。彼らはあるとして。

これが、私が費やさなければならなかった調査時間を誰かが回避するのに役立つことを願っています.

于 2013-07-11T12:04:43.943 に答える