Symfony2 образует частичное связывание


У меня возникают проблемы с формами symfony2, которые переопределяют данные моей сущности на null, если не представлен соответствующий ввод формы.

Вот пример:

Тип формы:

$builder
    ->add('customerid', 'text')
    ->add('field1', 'text')
    ->add('field2', 'text')
    ...

Контроллер:

$customer = new Customer();
$customer->setId('the customerID');
$customerForm = $this->createForm(new CustomerType(), $customer);
if ($request->getMethod() == 'POST') {
    $customerForm->bind($request);
    ...
}

В представлении я не отображаю текстовое поле customerid. Представлены только другие поля.

После отправки формы, $customerForm - > bind ($request); переопределяет ранее заданный customerID на null, даже если не было отправлено пустое значение для него.

Есть ли способ не переопределять значение, если поля ввода не были отрисованы?

Здесь, похоже, та же проблема : https://github.com/symfony/symfony/issues/1341 Патч был представлен, но я не нашел документации о том, как его использовать.

Спасибо

1 2

1 ответ:

Любое поле в форме (независимо от того, визуализировано оно или нет) будет иметь значение null или значение поля.

Какую версию Symfony вы используете?

Я предполагаю, что вы используете документально зафиксировано в поваренной книге .

Если вы используете 2.3+ (или вы обновляетесь до 2.3+), то вы должны использовать $form->submit (), который имеет второй аргумент, который позволяет установить форму, чтобы не перезаписывать свойства объекта, если они равны нулю. например $form->submit($request->get($form->getName()), false) (true-это логическое значение для установки / снятия перезаписи или $clearMissing на фактическом коде)