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 日期选择器。
由于日期时间的原因,对于我最初插入的数据,我需要创建具有输入类型的表单 "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'))
首先,我是 symfony2 的新手 -> 来自 Laravel 和 ZF1 我不得不承认这不是我所期望的。我在简单的任务上遇到了很多困难,在编写这个树枝编辑的那一刻仍然很痛苦。
所以场景:
我有一个包含 2 个日期时间字段的发票表格,我真的很讨厌生成的丑陋的 3 select 字段,所以我包含了我的 jQuery 日期选择器。
由于日期时间的原因,对于我最初插入的数据,我需要创建具有输入类型的表单 "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'))