저는 StrainGmoType에 의해 상속되는 기본 폼 (StrainType)을 가졌으며 StrainGmoType에는 StrainPlasmidType이 임베드되었습니다.Symfony : 포함 양식이있는 동적 양식
기본 양식 (StrainType)에는 사용자가 팀을 선택한 필드가 있고 일부 필드는이 선택 사항 (기본, 하위 및 포함 된 양식)에 따라 다릅니다. 기본 양식이나 하위에 선언 된 모든 필드의 경우 작동합니다. 하지만 2 CollectionType을 가지고 있는데,이 CollectionType에 ManyToMany Relation with Argument가 있습니다. 그런 다음 특정 유형 (StrainPlasmidType)을 수행하고 기본 및 하위 유형에서이를 CollectionType (이 예에서는 하위)에서 호출합니다. 하지만이 유형의 팀 필드를 가져올 수 없다면 PRE_SET_DATA, PRE_SUBMIT 또는 POST_SUBMIT을 수행 할 수 없습니다.
저는 inherit_data를 사용하려고했지만이 경우에는 적합하지 않습니다. StrainPlasmidType에서 팀 필드의 데이터를 얻으려면 어떻게해야합니까?
코드의 일부 :
StrainForm :
class StrainType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('team', EntityType::class, [
'class' => 'AppBundle\Entity\Team',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('team')
->leftJoin('team.members', 'members')
->leftJoin('team.projects', 'projects')
->leftJoin('projects.members', 'project_members')
->where('members = :user')
->orWhere('project_members = :user')
->setParameter('user', $this->tokenStorage->getToken()->getUser());
},
'data' => $this->tokenStorage->getToken()->getUser()->getFavoriteTeam(),
'choice_label' => 'name',
'placeholder' => '-- select a team --',
'mapped' => false,
])
GmoStrain 양식 :
class StrainGmoType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('strainPlasmids', CollectionType::class, [
'entry_type' => StrainPlasmidType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'required' => false,
])
//...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\Strain',
]);
}
public function getParent()
{
return StrainType::class;
}
}
StrainPlasmidType :
class StrainPlasmidType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('plasmid', EntityType::class, [
'class' => 'AppBundle\Entity\Plasmid',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('p')
->leftJoin('p.team', 'team')
->leftJoin('team.members', 'members')
->where('members = :user')
->setParameter('user', $this->tokenStorage->getToken()->getUser())
->orderBy('p.autoName', 'ASC')
;
},
'group_by' => function (Plasmid $plasmid) {
return $plasmid->getTeam()->getName();
},
'choice_label' => function (Plasmid $plasmid) {
return $plasmid->getAutoName().' - '.$plasmid->getName();
},
'placeholder' => '-- select a plasmid --',
])
->add('state', ChoiceType::class, [
'choices' => [
'Replicative' => 'replicative',
'Integrated' => 'integrated',
'Cured' => 'cured',
],
'placeholder' => '-- select a state --',
])
;