Насколько я могу судить, у вас есть несколько вариантов:
использовать преобразователь данных
это, безусловно, чистое решение, и оно должно быть предпочтительнее других.По сути, вы превращаете части данных, которые вы получаете, в массив / объект (moisAnne) и используете его для заполнения нескольких полей.
более длинное и, вероятно, лучшее описание: https://symfony.com/doc/current/form/data_transformers.html (на самом деле это дополнение к следующей инструкции)
Сначала вы создаете новый тип формы MoisAnneType
с двумя полями, mois и anne.
Затем вы создаете преобразователь данных, который превращает ваш moisAnne в массив ['mois' => $mois, 'anne' => $anne]
(и, конечно, также в обратном порядке).
используйте новый тип формы в вашей исходной форме для поля moisAnne
в вашем шаблоне, вам, вероятно, не нужно явно отображать его, но вытакже можно использовать form.moisAnne.mois
и form.moisAnne.anne
.
развернуть сущность (дешевый преобразователь данных)
добавить геттер и сеттер в AppBundle\Entity\FicheFrais
, которые используют массивыдля связи:
public function getExpandedMoisAnne() {
$mois = /** your code **/
$anne = /** your code **/
return ['mois' => $mois, 'anne' => $anne];
}
public function setExpandedMoisAnne(array $moisAnne) {
$this->moisAnne = $moisAnne['mois'].$moisAnne['anne']; // or whatever
}
затем в конструкторе форм вы можете просто использовать
->add('mois', null, [
'property_path' => 'expandedMoisAnne[mois]'
])
->add('anne', null, [
'property_path' => 'expandedMoisAnne[anne]'
])
прослушиватели событий
Я считаю, что эта опция довольно грязная, во всяком случае,Я уверен, что можно использовать FormEvent
s, чтобы добавить несопоставленные поля, которые не являются частью исходного объектаи выполнять преобразования данных в слушателях / обработчиках событий.Я очень советую против этого.