0

sfWidgetFormInputCheckbox に問題があります。チェックボックスがオフの場合、データベースに false を保存しません。

残念ながら、私のフィールドはブール値であり、表示される値にバグはありません。

次のようにデフォルト値を設定します$this->setDefault('status', false);。どちらも機能しません。

私のウィジェット:

$this->widgetSchema['SUSPENSION_TEMP'] = new sfWidgetFormInputCheckbox();
$this->validatorSchema['SUSPENSION_TEMP'] = new sfValidatorBoolean(array('required' => false));

デフォルト :

$this->setDefault('SUSPENSION_TEMP', false);

何か案は ?

編集:

チェックボックスがチェックされている場合、1 を保存します。チェックを外して保存するときは、データベースの値を変更しないでください。したがって、一度チェックすると、データベースの値は常に 1 になります (私のコードでは true です)。

編集2:

追加する手がかりが 2 つあります。フィールドが schema.xml 内の整数である場合、両方の値が機能しますが、表示される値に問題があります (チェックボックスが 0 の値にチェックされている)。ここで、 he フィールドはブール値です。

セッターは、チェックボックスがチェックされている場合は「on」、チェックされていない場合は true の 2 種類の値を受け取ります。フォームでデフォルト値を false に設定し、セッターをオーバーライドしようとしました。どちらも機能しません。

セッターの作業を意味しますが、理由は不明ですが、基本的なシーアが間違った値で直後に呼び出されます。

編集3:

わかりました、私は問題の一部を理解しています。チェックボックスがオフの場合、セッターは呼び出されません。mコードがvar_dump()を表示したためだと思いました。後でアーカイブ目的でこのオブジェクトの古いバージョンをコピーしたためです。

しかし、symfony はフィールドがレンダリングされたことを検出する必要がありますが、そうではありません。どうしてか分かりません。HTMLで理由を知っていますが、明らかにsymfonyは「ねえ、ここにチェックボックスを追加します」と自分に言い聞かせることができるはずです。

これを行うエレガントな方法はありますか、それとも手で確認する必要がありますか?

4

1 に答える 1

0

問題は私のフォーム処理から来ました。私のレガシーコードは、すべてのフィールドをレンダリングしませんでした(例:動作によって更新されたスタンプフィールド)。fromArrayを使用して保存していました。これは、レンダリングされたフィールドのみを更新します。

従来の symfony 形式では、必要な検証のために chcuk するために、レンダリングされていないすべてのフィールドに null を与えます。

そのため、fromArray を使用している場合は、自分で確認して 0 に設定してから保存する必要があります。それでも、フォームを使用するためにクライアントに役に立たない(この場合)または機密データを送信する必要があるため、フォーム->保存は本当にばかげていると思います。

于 2012-10-23T15:00:03.790 に答える