Я не знаю, является ли это ошибкой в Symfony / twig или я не правильно это понимаю.
У меня есть форма со многими полями, и одно 'поле' является подобъектом (может быть, у этого есть другое имя, но я не знаю, как в нотации Symfony), например:
...
...
->add('bank_name', TextType::class,
[
'required' => false,
'label' => 'Bank name',
'attr' => [
'title' => 'Bank name',
],
])
->add('person', PersonType::class,
[
'required' => true,
'label' => 'Contact Person data',
])
...
...
Это делает форму в ветке правильно, но когда я хочу редактировать свои данные, Person
поля не заполняются.
Я сделал dump
формы, чтобы проверить, что здесь происходит, и я нашел обходное решение:
{{ form_widget(form.person.name, {'value': form.person.vars.value.name}) }}
Это решение, потому что, как правило, значения находятся, например, в:
{{ dump(form.bank_name.vars.value) }}
но в случае Person он находится в:
{{ dump(form.person.vars.value.name) }}
,
{{ dump(form.person.vars.value.address) }}
, ...
Любой намек здесь?
"symfony/asset": "^4.0",
"symfony/console": "^4.0",
"symfony/debug-pack": "^1.0",
"symfony/flex": "^1.0",
"symfony/form": "^4.0",
"symfony/framework-bundle": "^4.0",
"symfony/lts": "^4@dev",
"symfony/maker-bundle": "^1.3",
"symfony/orm-pack": "^1.0",
"symfony/security-bundle": "^4.0",
"symfony/serializer": "^4.0",
"symfony/validator": "^4.0",
"symfony/web-server-bundle": "^4.0",
"symfony/yaml": "^4.0"
Редактировать # 1:
Заполните форму с данными в контроллере:
$bank = Utils::jsonToObject($bankData, Bank::class);
if (isset($bankData->person)) {
$person = Utils::jsonToObject($bankData->person, \App\Entity\API\Person::class);
} else {
$person = new \App\Entity\API\Person();
}
$bank->setPerson($person);
$form = $this->createForm(BankType::class, $bank);
$form->handleRequest($request);
Редактировать # 2
Я нашел, где именно проблема, но обходной путь, о котором я упоминал ранее, не работает.
Проблема только с name
Поле персоны. Все остальные поля работают правильно. Я предполагаю, что это конфликт с subobject name
- Person
и Person field name