Какво имате предвид под един проблем, който може да бъде изпълнението на тези методи, ако приложението не е памет? Какво е приложение за памет?
Отговори (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
Здравей, това вероятно ще свърши работа, но бих искал да го реша по начина на symfony :)
- person user3087048; 15.05.2014
null
се предава наsetProcessAfterDate()
, когато няма подадени данни. Добавете преобразувател на данни към формуляра за полетоsetProcessAfterDate()
, за да трансформирате NULL в обектDate
с нещо като 0000-00-00. symfony.com/doc/current/cookbook/form/data_transformers.html Това винаги трябва да предава обект за дата на сетера, независимо какво. - person Tek   schedule 02.02.2015