複数のフィールドを含むフォームがあります。それらの1つはDatetimeフィールドです。そのフィールドのデフォルト値を定義する方法は?
関連するエンティティ、コントローラー、コンストラクター、および__constructに値を設定しようとしました。
$myEntity = new MyEntity();
$myEntity->setMyDate(new \DateTime());
$form = $this->createForm(new AddMyEntity(), $myEntity);
動作していません。
BuildFormで$data
変数を定義しようとしました:
$builder->add('myDate', 'date', array(
'format' => \IntlDateFormatter::SHORT,
'input' => 'datetime',
'widget' => 'single_text',
'data' => new \DateTime("now"));
動作していません。 Symfony2コミュニティのアイデアはありますか?
編集:faostの要求に応じてエンティティを追加します。
/**
* @ORM\Column(name="myDate", type="datetime")
* @Assert\NotBlank()
*/
private $myDate;
エンティティコンストラクターで設定します。
class Entity
{
/**
* @var \DateTime
*/
private $date;
public function __construct()
{
$this->date = new \DateTime();
}
}
Elnurの答えは正解であり、おそらく推奨される答えです。しかし、完全を期すために、フォーム内の日付ウィジェットのデフォルト値を設定する別の方法は、DateTimeのインスタンスでoptions配列引数にdata
キーを指定することです。
$builder->add('myDate', 'date', array(
'data' => new \DateTime()
));
注:これにより、すべての編集で以前に設定された日時が上書きされます。
このソリューションでは、エンティティオブジェクトを変更する必要はありません。
$builder->add('myDate', DateTimeType::class, [
'label' => 'My Date',
'required' => false,
'date_widget' => 'single_text',
'time_widget' => 'single_text',
'date_format' => 'dd/MM/yyyy'
]);
$builder->get('myDate')->addModelTransformer(new CallbackTransformer(
function ($value) {
if(!$value) {
return new \DateTime('now +1 month');
}
return $value;
},
function ($value) {
return $value;
}
));
このソリューションは、この動作のみをこのフォームに適用します。この動作をエンティティ自体に結合することはありません。エンティティを異なる必要な動作で変更するいくつかのフォームがあります。デフォルトの日付が必要なものとそうでないものがあります。