2016-03-31 7 views
-1

私はFOSRestBundleを使用しています。FormTypeのチェックボックスとして定義されたいくつかのフィールドにnullを保存できるようにPOSTを設定しようとしています。symfony2でnullable booleanを追加するにはどうすればいいですか?

私のエンティティは、注釈NULL可能=真

/** 
* @ORM\Column(type="boolean", nullable=true) 
*/ 
protected $foo_bar; 

(それはほとんどdeaultsに残っているだけなので、これまでのAPIを介して使用されます)にformTypeが偽

$builder->add('foo_bar', 'checkbox', array(
    'required' => false 
)); 
に設定が必要であったました

私が保存してfoo_barはがnullの場合は、それは私が必要とするデータベースで0

$entityData = $request->request->all(); 
$entityData['foo_bar'] = null; 
$entity = $this->container->get('acme.entity.handler')->post($entityData); 

として保存されます 私は:ヌル(答えではない)のではなく、0が

編集(ハンドラはここでそれはちょうどその持続にformTypeに対してポストされたデータを検証していますhttp://williamdurand.fr/2012/08/02/rest-apis-with-symfony2-the-right-way/からである)(偽答え)としてfoo_barは保存しますFormTypesがnullableブール値を処理できるかどうかは不明です。この質問に対する応答に基づくテストでは、falseをnullまたはnullとしてfalseに保存します。今のところ、リンクされたポストで説明されているようにハンドラの使用をやめ、代わりに手動で検証し、エンティティマネージャに直接保持することに決めました。

+0

foo_barカラムが存在するテーブルに 'explain table_name'を表示できますか? – Drmjo

+0

どうすればいいですか? – Alec

+0

説明> "foo_bar | tinyint(1)| YES | MUL | NULL"ですので、doctrineが正しく作成しました。 – mike

答えて

0

チェックボックスには、trueまたはfalseの2つの状態しかありません。だから、それを選択しないことは、答えられないのとは反対に、偽としか見なされませんでした。

あなたがしていることを達成する最も簡単な方法は、オプションとしてtruefalseという選択フィールドを使用し、空の値を追加することです。

$builder->add('foo_bar', ChoiceType::class, array(
    'required'  => false, 
    'choices'  => array(
     'Yes'  => true, 
     'No'  => false, 
    ), 
    'empty_value' => 'Not Answered', 
)); 

テキストは、APIではなく、直接形でそれを使用しているとして、あなたが望む今まで何もすることができますが、私はあなたがそれを見たとき、それは値がより明確になりますね。 「はい」、「いいえ」、「何の答えが」

定義により、チェックボックスが1を保持することはできません

+0

エントリを編集したいとき、どのようにレンダリングしますか? – Dheeraj

+0

デフォルトでは 'Not Answered'(デフォルト値をロード時にnullにする)と' Yes'(真)と 'No'(偽)の選択肢があります。 OPがREST APIを作成しているので、検証では使用されないため、実際のテキストは必要ありませんが、再利用性のために通常の形で使用したいと思った場合には理にかなっています。 – qooplmao

+0

もう一度お悔やみ申し訳ありませんが、これはユーザーに視覚的にどのように見えますか? yes =チェック済み、no =チェックされていない、answer = not ?? (チェックされていない?!)混乱するでしょう – Dheeraj

0

はおそらく、チェックボックスを使って、必要なフォームフィールドのタイプではありません、多分あなたはと、ドロップダウンを使用する必要がありますtrueまたはfalseの2つの値のいずれかを使用すると、フィールドをnullに設定してチェックボックスフィールドをユーザーに表示しないとコントローラーに何か不思議なことが起きる可能性がありますが、これは '分離の懸念'ガイドラインを破ってしまいます。チェックボックスを使わなければなりません。

+0

私は妥当性を検証するためにformtypeを構築しています(これはRESTfulなPOSTとPUTを処理するためのものです)ので、ちょうど整数で指定してください。 – mike

+0

@ qooplmaoと言ったように、1,0およびnullはDBに格納されたデータ – Dheeraj

関連する問題