Какво имате предвид под един проблем, който може да бъде изпълнението на тези методи, ако приложението не е памет? Какво е приложение за памет?

person user3087048    schedule 15.05.2014    source източник
comment
null се предава на setProcessAfterDate(), когато няма подадени данни. Добавете преобразувател на данни към формуляра за полето setProcessAfterDate(), за да трансформирате NULL в обект Date с нещо като 0000-00-00. symfony.com/doc/current/cookbook/form/data_transformers.html Това винаги трябва да предава обект за дата на сетера, независимо какво.   -  person Tek    schedule 02.02.2015


Отговори (1)


Е, това може да не е най-добрият начин да го решим, но да накратко:

$form->handleRequest($request);

if($form->isValid()) // check if the basic version of the form is ok
{
     $form = $this->createForm(new XXXXForm(), $form->getData()); // you recreate the form with the data that was submitted, so you rebuild the form with new data

     if($form->isValid())
     {
           // ok
     }



  // not ok
}

След това във функцията buildForm базирате стойността на атрибута „задължително“ на полетата въз основа на това, което искате:

'required' => $this->getCheckRequired($options)


private function getCheckRequired($options) // checks whether field should be required based on data bound to the form
{
  if($options && isset($options['data'])
  {

    switch $options['data']->getStatus():
       // whatever

    ;
  }

return false;

}  

Както казах, това не е най-доброто решение и не коригира вашия подход, а по-скоро предлага различен, но върши работа

person Bartłomiej Wach    schedule 15.05.2014
comment
Здравей, това вероятно ще свърши работа, но бих искал да го реша по начина на symfony :) - person user3087048; 15.05.2014