web-dev-qa-db-ja.com

symfony2フォームのDatetimeフィールドにデフォルト値を設定します

複数のフィールドを含むフォームがあります。それらの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;
47
i.am.michiel

エンティティコンストラクターで設定します。

class Entity
{
    /**
     * @var \DateTime
     */
    private $date;

    public function __construct()
    {
        $this->date = new \DateTime();
    }
}
66

Elnurの答えは正解であり、おそらく推奨される答えです。しかし、完全を期すために、フォーム内の日付ウィジェットのデフォルト値を設定する別の方法は、DateTimeのインスタンスでoptions配列引数にdataキーを指定することです。

$builder->add('myDate', 'date', array(
    'data' => new \DateTime()
));

注:これにより、すべての編集で以前に設定された日時が上書きされます。

29
Adam Elsodaney

このソリューションでは、エンティティオブジェクトを変更する必要はありません。

    $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;
        }
    ));

このソリューションは、この動作のみをこのフォームに適用します。この動作をエンティティ自体に結合することはありません。エンティティを異なる必要な動作で変更するいくつかのフォームがあります。デフォルトの日付が必要なものとそうでないものがあります。

8
Henry