formbuilder中的Symfony2 editForm datetime对象,但我需要它是一个字符串

Symfony2 editForm datetime object in formbuilder but I need it to be a string

首先,我是 symfony2 的新手 -> 来自 Laravel 和 ZF1 我不得不承认这不是我所期望的。我在简单的任务上遇到了很多困难,在编写这个树枝编辑的那一刻仍然很痛苦。

所以场景:

我有一个包含 2 个日期时间字段的发票表格,我真的很讨厌生成的丑陋的 3 select 字段,所以我包含了我的 jQuery 日期选择器。

http://tinypic.com/r/eg5kyg/8

由于日期时间的原因,对于我最初插入的数据,我需要创建具有输入类型的表单 "text" :

$form=$this->createFormBuilder($invoice)
                        ->add('date_ref','text', array(
                            'required'=> true))
                        ->add('date_sent','text', array(
                            'required' => true ))

这样丑陋的 3 select 日期选择器就不会显示,我的用户可以 select 以优雅的方式选择日期。

一切正常,直到编辑表单:

我不知道为什么我没有像我最初希望的那样完成它:

$invoice = $em->getRepository('AppBundle:Invoice')->find($id);
$form=$this->createFormBuilder($invoice)
                        ->add('date_ref','text', array(
                            'required'=> true))
                        ->add('date_sent','text', array(
                            'required' => true ))
                        ->add('value','integer',array('required'=>true))
                        ->add('nr_ref','text',array('required'=>true))

所以我想从具有属性的实体创建一个表单,但在视图中

<div class="form-group">
                        {{ form_label(theForm.date_ref, 'Date Refferenced', { 'label_attr': {'class': 'control-label col-md-5'} }) }}
                        {{ form_errors(theForm.date_ref) }}
                        <div class="col-md-6">
                            {{ form_widget(theForm.date_ref,{'attr': {'class': 'form-control', 'data-provide':'datepicker'}}) }}
                        </div>
                    </div>

没有工作,所以我无法创建我的编辑表单作为我的第一个表单,其中 date_ref 输入具有 "text" 值。

我搜索并发现从实体数据创建表单需要创建一个 "Type" 所以我创建了我的 "InvoiceType"

其中有:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('is_paid')
 /* not working
   ->add('date_ref', 'date', array('input'  => 'datetime',
                                            'format' => date('y-M-d'),
                                            'widget' => 'single_text'))
   */
      ->add('date_ref')    //this is a datetime obj which results in those 5 selects
     ->add('date_sent')
            ->add('value')
            ->add('nr_ref')
            ->add('name_provider')
        ;
    }

$invoice = $em->getRepository('AppBundle:Invoice')->find($id);
$form = $this->createForm(new InvoiceType(), $invoice);

但是因为这个方法从实体创建了一个表单,如果我从 buildForm() 函数更改类型.. 我得到一个错误,他需要一个 Datetime 对象而不是一个字符串 ("text" ).

所以现在我坚持制作编辑表单 .. 这将是一种类型,1 个输入文本并使用日期选择器预填充数据库中的日期(类似于 2014/02/02),当你单击它,它应该出现在创建表单中。

就像我说的我是新手,我学到了很多我通常在其他 MVC 中以其他方式完成的事情,我在这个 datetime 对象和 symfonys 3 select datetime.

http://tinypic.com/r/28bz5h4/8 <- 这看起来很糟糕

非常感谢 Khalid Junaid,在我查阅了您提到的 post 之后,我终于让它按我想要的方式工作了:

解决方案:

->add('date_ref', 'date' ,array(
                'widget'=> 'single_text',
                'format'=>'d/M/y'))
 ->add('date_sent','date' ,array(
                'widget'=> 'single_text',
                'format'=>'d/M/y'))