2016-04-13 11 views
6

したがって、DOBフィールドにnullオプションを送信できるようにします。ここで Symfony2 DateTime null accept

は私のフォームビルダーです:

->add('birthDate', DateType::class, array(
       'widget' => 'single_text', 
       'format' => 'yyyy-MM-dd')) 

そして、ここに私のエンティティでこれらのフィールドである

/** 
    * @ORM\Column(
    *  type="date", 
    *  nullable=true 
    *) 
    * @JMS\Groups("single") 
    * 
    * @var \DateTime 
    */ 
    protected $birthDate; 

I`mは、私は、エラーMSGを得たヌルを送信しようとすると

Expected argument of type "DateTime", "NULL" given 

アイデア?

CRITICAL - Uncaught PHP Exception Symfony\Component\PropertyAccess\Exception\InvalidArgumentException: "Expected argument of type "DateTime", "NULL" given" at /var/www/server.local/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php line 253 



    $type = $trace[$i]['args'][0]; 
    $type = is_object($type) ? get_class($type) : gettype($type); 
    throw new InvalidArgumentException(sprintf('Expected argument of type "%s", "%s" given', substr($message, $pos, strpos($message, ',', $pos) - $pos), $type)); 
} 

}

+1

を得ている:あなたはデフォルト値としてセッターに

$builder->add( 'birthDate', DateType::class, [ 'widget' => 'single_text', 'format' => 'yyyy-MM-dd', 'by_reference' => true, ] ); 

2.nullをしてみましょうこのエラー? – abdiel

+0

フォームwhith birthDateフィールド –

+0

を送信するときに、また、DBスキーマがエンティティと同期していることを確認しましたか? – Vamsi

答えて

14

のように見え、問題はPHPの型のヒンティングによって引き起こされました。 タイプヒント(たとえばsetBirthDate(\DateTime $value))を使用すると、PHPは実際にDateTimeオブジェクトを提供します。明らかに、nullはそのようなオブジェクトではありません。この問題を解決するには、$valueにデフォルト値のsetBirthDate(\DateTime $value = null)を指定することができます。

これは文書化された動作であり、PHPドキュメント(http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration)で説明されています。

関連の通路:

型宣言を指定するには、タイプ名はパラメータ名の前に追加する必要があります。パラメータのデフォルト値がNULLに設定されている場合、NULL値を受け入れるように宣言できます。

+2

注:PHP 7.1では、ヒントをオプションのnullableとして入力することもできます: 'setBirthDate(?\) DateTime $ value) ' –

2

それに任意の値を渡さないでください。

->add(
    'birthDate', 
    DateType::class, 
    array(
     'required' => false, 
     'widget' => 'single_text', 
     'format' => 'yyyy-MM-dd' 
    ) 
) 
+1

私のために働いていません –

+0

どのようにフォームデータを設定していますか? - > handleRequest($ request); ? – LMS94

+0

いいえわかりましたが、私はORMアノテーションを使用していますので、あなたのソリューションは私のためには機能しません。 –

0

私のプロジェクトでは、DOBフィールドを使用しています。これを試して。 私のORMファイルはこの場合、この<field name="dob" type="date" column="dob" nullable="true"/>

->add('dob','birthday',array(
      'widget' => 'single_text', 
      'format' => 'dd-MM-yyyy', 
      'required' => false, 
      'attr' => array('class' => 'datepicker', 
       'data-provide' => 'datepicker','data-date-format' => 'dd-mm-yyyy') 
     )) 
+0

私はそれほど簡単ではありません。日、年、年の3つのドロップダウン入力からなる角度指示文を作成しました –

2

この問題は、コメントに記載されているタイプヒント付きセッターによって発生します。 2つの解決策があります

1.使用'by_reference' => trueは、フォーム上:あなたが

public function setBirthDate(\DateTime $value = null) 
{ 
    ..... 
} 
+0

あなたの最初の解決策が理にかなっています.2番目の解決策も有効ですが、これによりフィールドが不要なデータ(null)を保持するようになります –

関連する問題