【问题标题】:Symfony2 editForm datetime object in formbuilder but I need it to be a stringformbuilder中的Symfony2 editForm datetime对象,但我需要它是一个字符串
【发布时间】:2015-02-20 19:27:43
【问题描述】:

对于初学者,我是 symfony2 的新手 -> 来自 Laravel 和 ZF1 我不得不承认这不是我所期望的。我在简单的任务上遇到了很多困难,到写这篇文章的那一刻,编辑仍然很痛苦。

所以场景:

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

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

由于日期时间的原因,我最初插入数据时需要创建输入类型为“文本”的表单:

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

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

在编辑表单之前一切顺利:

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

$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 输入和“文本”值创建我的编辑表单作为我的第一个表单。

我搜索并发现从实体数据创建表单需要创建“类型”,因此我创建了“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 对象而不是字符串(“文本”)。

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

就像我说我是新人一样,我学到了很多我通常在其他 MVC 中以其他方式完成的东西,我在这个 datetime Object 和 symfonys 3 select datetime 方面遇到了很多困难。

http://tinypic.com/r/28bz5h4/8

【问题讨论】:

标签: php forms symfony datetime doctrine-orm


【解决方案1】:

非常感谢 Khalid Junaid,在查阅了您提到的帖子后,我终于如愿以偿:

解决方案:

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

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2017-12-23
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多