4

選択フィールド (はいまたはいいえ) としてフォームに入力したブール フィールドがあります。データトランスフォーマーなしで0または1を取得します。ビュー BooleanToStringTransformer を追加しました(これは合理的だと思われました):

$builder
        ->add(
            $builder->create('myBooleanField', 'choice', array(
                'choices' => array(true => 'Yes', false => 'No'),
            ))
            ->addViewTransformer(new BooleanToStringTransformer('1'))
        )

フォームを表示しようとすると、「ブール値が必要です。」というエラーが表示されます。ただし、フォームを作成する前に、フィールドが false に設定されています。

モデル トランスフォーマーとして設定しようとしました。フォームは表示されますが、送信すると、フィールドが無効であると宣言されます。

私は何を間違っていますか?

編集:私はほとんどそれを手に入れました。

  • ビュー トランスフォーマーの代わりにモデル トランスフォーマーを使用しました (選択フィールドは、ブール値ではなく、文字列または整数で機能します)
  • 選択リストを から に変更しarray(true => 'Yes', false => 'No')ましたarray('yes' => 'Yes', 'no' => 'No')

したがって、コードは次のようになります->addModelTransformer(new BooleanToStringTransformer('yes'))

選択した値に関係なく、フィールドが常に true に設定されていることを除いて、データ変換は機能します。

どうしたの?

4

3 に答える 3

1

Model トランスフォーマーの代わりに View トランスフォーマーを使用したようです。基になるモデルがブール値を想定している場合は、Model トランスフォーマーで 0/1 をブール値に逆変換する必要があります。

.. または、ビュー トランスフォーマーに逆変換メソッドを実装し忘れている可能性があります。

ビュー トランスフォーマーとモデル トランスフォーマーの違いについて詳しくは、こちらをご覧ください。

于 2013-08-30T09:00:26.333 に答える