簡體   English   中英

Symfony CollectionType -> EntryType -> 帶參數的表單

[英]Symfony CollectionType -> EntryType -> Form with params

我有兩個 forms,第一個允許我添加項目ProjectType ,第二個是允許向項目ProjectContactType添加貢獻者的表單。

在第一種形式中,我得到帶有解析器的實體公司

public function buildForm(FormBuilderInterface $builder, array $options): void
{
    $builder
        ->add('name', TextType::class)
        ->add('projectContacts', CollectionType::class, [
            'label' => false,
            'entry_type' => ProjectContactType::class,
            'by_reference' => false,
            'allow_add' => true,
            'allow_delete' => true,
        ]);
}

public function configureOptions(OptionsResolver $resolver): void
{
    $resolver
        ->setDefaults([
            'data_class' => Project::class,
        ])
        ->setRequired([
            'company',
        ]);
}

我希望能夠以我的第二種形式接收同樣的實體。

public function buildForm(FormBuilderInterface $builder, array $options): void
{
    $builder
        ->add('user', EntityType::class, [
            'placeholder' => 'Choisir un client',
            'required' => true,
            'class' => User::class,
            'choice_label' => function (User $user) {
                return $user->getFirstName() . " " . $user->getLastName();
            }
        ]);
}

public function configureOptions(OptionsResolver $resolver): void
{
    $resolver
        ->setDefaults([
            'data_class' => ProjectContact::class,
        ]);
}

我的目標是能夠按公司實體過濾用戶。

謝謝你。

您應該能夠像這樣將 ProjectType 的公司傳遞給 ProjectContactType:

使 ProjectContactType 中所需的公司:

public function configureOptions(OptionsResolver $resolver): void
{
    $resolver
        ->setDefaults([
            'data_class' => ProjectContact::class,
        ])
        ->setRequired([
            'company',
        ]);
}

然后(在 ProjectType 中)將公司從 ProjectType 的選項傳遞給 ProjectContactType:

public function buildForm(FormBuilderInterface $builder, array $options): void
{
    $builder
        ->add('name', TextType::class)
        ->add('projectContacts', CollectionType::class, [
            'label' => false,
            'entry_type' => ProjectContactType::class,
            'by_reference' => false,
            'allow_add' => true,
            'allow_delete' => true,
            'entry_options' => [
                'company' => $options['company'], 
            ],
        ]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM