2016-03-21 4 views
0

'da bir denetleyicide normalleştirilmiş form verisine erişme Kullanıcının sunduğu başka bir alanın değerine bağlı olarak bir alanın varsayılan değerini ayarlamak için FormType'ım için bir form olay dinleyicisi (PRE_SUBMIT) eklemeliydim:Symofny 2

 ->add('time_until', datetime, [ 
      'required' => false, 
      'input' => 'datetime', 
      'widget' => 'single_text', 
      'format' => 'yyyy-MM-dd HH:mm', 
      'label' => false, 
     ]) 

sorun şu ana kadar:

//In my FormType: 

public function onPreSubmit(FormEvent $event) 
{ 
    $formData = $event->getData(); 
    if (empty($formData['time_until'])) { 
     $date = new \DateTime($formData['time_from']); 
     $date->add(new \DateInterval('PT1H')); 
     $formData['time_until'] = $date->format('Y-m-d H:i'); 
    } 
    $event->setData($formData); 
} 

time_unti anahtar datetime tiptedir formun time_until sahaya ayarlanır ve daha sonra değeri eşleştirilir. Ancak, ben normalize benim denetleyicisi form alanlarının değerlerine ve ben mümkün istiyorum demek "normalleştirilmiş" ile $form->handleRequest($request);

çağrısının ardından formdaki mevcut değil DateTime nesnelere erişimi olması gerekir yapmak için:

$form->get('time_until') ve biçimde bir dizi bilgisi 'yyyy-aA-gg SS: dd' time_until anahtarının altında formda saklanan DateTime nesnesi geri değil.

Tavsiyeler çok takdir edilecektir. Teşekkür ederim!

+0

$ form-> ('time_until') almak denetleyicisi dizeyi dönecekti (ve ayrıca dizede db depolanır olacaktır) oluştururlar -> biçimi ("yyyy-AA-GG SS: DD '); – Cerad

cevap

0
  1. Eğer sadece form tipi sınıftaki bazı öznitelik $normalizedTimeUntil + ekle bu değeri dönecekti toplama maddesinin getNormalizedTimeUntil() ekleyebilir. Sonra form durumunda bu özelliği ayarlayabilirsiniz ve denetleyici size alıcı fonksiyonu

  2. ile form tipi nesnesinin dışarı çekin edebilir veya olmayan eşleştirilmiş dize form alanını timeUntilString (http://symfony.com/doc/current/reference/forms/types/form.html#mapped) ekleyin ve form durumunda doldurabilirsiniz

  3. veya bu Datetime nesnesini dizeye dönüştürmek için trafo (http://symfony.com/doc/current/cookbook/form/data_transformers.html) ekleyebilirsiniz. Örneğin, veritabanında dize biçiminde tarih depolamanız gerekiyorsa bu durum uygun olacaktır. Ardından saha alıcı