在symfony2表单的Datetime字段中设置默认值

i.a*_*iel 47 php symfony symfony-2.1

我有一个包含几个字段的表单.其中之一是Datetime字段.如何定义该字段的默认值?

我已经尝试在相关实体,控制器,构造函数和__construct中设置一个值:

$myEntity = new MyEntity();
$myEntity->setMyDate(new \DateTime());
$form = $this->createForm(new AddMyEntity(), $myEntity);
Run Code Online (Sandbox Code Playgroud)

不工作.

试图$data在buildForm中定义变量:

$builder->add('myDate', 'date', array(
    'format' => \IntlDateFormatter::SHORT,
    'input' => 'datetime',
    'widget' => 'single_text',
    'data' => new \DateTime("now"));
Run Code Online (Sandbox Code Playgroud)

也不工作.任何想法,Symfony2社区?

编辑:根据要求添加实体.

/**
 * @ORM\Column(name="myDate", type="datetime")
 * @Assert\NotBlank()
 */
private $myDate;
Run Code Online (Sandbox Code Playgroud)

Eln*_*mov 66

在实体构造函数中设置它:

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

    public function __construct()
    {
        $this->date = new \DateTime();
    }
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*ney 30

Elnur的答案是正确的,也许是推荐的答案.但是为了完整性,在表单中设置日期窗口小部件的默认值的另一种方法是使用dataDateTime实例在options数组参数中指定键.

$builder->add('myDate', 'date', array(
    'data' => new \DateTime()
));
Run Code Online (Sandbox Code Playgroud)

注意:这将覆盖每次编辑时先前设置的日期时间.

  • 此方法仅在添加新条目时有效,但在编辑时失败,因为它不会在表单上放置数据库值而是放置当前时间 (7认同)

Hen*_*nry 8

此解决方案不需要修改您的实体对象.

    $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;
        }
    ));
Run Code Online (Sandbox Code Playgroud)

此解决方案仅将此行为应用于此表单,它不会将此行为与实体本身相关联.您可能有几种形式可以修改具有不同所需行为的实体.有些需要默认日期,有些则不需要.