Symfony2 editForm datetime объект в formbuilder, но мне нужно, чтобы он был строкой

0

Для начала я новичок в symfony2 → от Laravel и ZF1. Я должен признать, что это не то, что я ожидал. У меня была большая борьба с простыми задачами, и к моменту написания этого редактирования ветка все еще боль.

Итак, сценарий:

У меня есть форма счета-фактуры с двумя полями datetime в нем, я действительно ненавижу это уродливое поле выбора 3, которое было сгенерировано, поэтому я включил мой jQuery datepicker.

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

Для моего первоначального ввода данных из-за datetime мне нужно было создать свою форму с типом ввода "текст":

$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 входной текст и предварительно заполненный датой из базы данных (что-то вроде 2014/02/02) с использованием datepicker, и когда вы нажмете на нее, это должен отображаться как в форме создания.

Как я уже сказал, я новичок, я узнал много вещей, которые я обычно делал другими способами в других MVC, и я много боюсь с этим datetime Object и symfonys 3 select datetime.

http://tinypic.com/r/28bz5h4/8 <- Это выглядит ужасно

  • 1
    Я надеюсь, что если вы охватите документацию должным образом, вы можете использовать поле datatime, и оно может быть отображено как текстовый тип, а пока это начало stackoverflow.com/a/15537698/853360
Теги:
datetime
forms
doctrine2

1 ответ

0
Лучший ответ

Большое спасибо Халиду Джунайду, после того как я посмотрел сообщение, о котором вы упоминали, я, наконец, получил его работу, поскольку я хотел:

Решение:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню