我有一个循环,其中为我拥有的每个“ Joueur”创建一个表单:
foreach ($joueurs as $j)
{
$sUniqueFormName = 'Form' . $j->getId();
$oForm = $this->get('form.factory')->createNamed($sUniqueFormName, PlayedType::class, $played);
$aForms[$sUniqueFormName] = $oForm;
}
我想将此实体Joueur发送到我的表单并将其设置为默认值。
表格:
class PlayedType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('joueur')
->add('max')
->add('score')
->add('points')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Played::class,
]);
}
}
在这里,“ joueur”属性是一种选择类型,并且希望使用我在循环中获得的“ joueur”默认设置此值。
有可能吗?
答案 0 :(得分:1)
使用$ j值将数组作为第四个arg传递:
foreach ($joueurs as $j)
{
$sUniqueFormName = 'Form' . $j->getId();
$oForm = $this->get('form.factory')->createNamed($sUniqueFormName, PlayedType::class, $played, array('joueur' => $j);
$aForms[$sUniqueFormName] = $oForm;
}
检查构造函数以获取更多信息:https://api.symfony.com/3.3/Symfony/Component/Form/FormFactory.html
并通过$ options在PlayedType中恢复它并将其设置为数据属性
class PlayedType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$form = $event->getForm();
$form->add('joueur', null, array(
'data' => $event->getData() ?: options['joueur']
))
->add('max')
->add('score')
->add('points')
;
});
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Played::class,
'joueur' => null
]);
}
}
答案 1 :(得分:0)
例如,尝试直接在joueur
实体上设置played
,例如:
foreach ($joueurs as $j) {
$sUniqueFormName = 'Form' . $j->getId();
$played->setJoueur($j);
$oForm = $this->get('form.factory')->createNamed($sUniqueFormName, PlayedType::class, $played);
$aForms[$sUniqueFormName] = $oForm;
}