Для начала я новичок в symfony2 → от Laravel и ZF1. Я должен признать, что это не то, что я ожидал. У меня была большая борьба с простыми задачами, и к моменту написания этого редактирования ветка все еще боль.
Итак, сценарий:
У меня есть форма счета-фактуры с двумя полями datetime в нем, я действительно ненавижу это уродливое поле выбора 3, которое было сгенерировано, поэтому я включил мой jQuery datepicker.
Для моего первоначального ввода данных из-за 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 <- Это выглядит ужасно
Большое спасибо Халиду Джунайду, после того как я посмотрел сообщение, о котором вы упоминали, я, наконец, получил его работу, поскольку я хотел:
Решение:
->add('date_ref', 'date' ,array(
'widget'=> 'single_text',
'format'=>'d/M/y'))
->add('date_sent','date' ,array(
'widget'=> 'single_text',
'format'=>'d/M/y'))