嵌入CollectionType中的ChoiceType仅呈现一次

时间:2018-09-13 16:14:41

标签: php forms symfony

我正在尝试向Web应用程序的邮件合并部分添加一些单选按钮。如果用户导入了电子邮件的csv,并且电子邮件已经与现有用户匹配,则可以选择创建新用户帐户或使用已经与该用户关联的电子邮件之一。如果他们从下拉列表中选择“否”以不添加新用户,我希望单选按钮显示在可用用户帐户旁边,供他们选择。问题是我无法获取每个用户的下拉列表/半径。

我尝试了一个带有collectionType的父窗体,该collectionType包含一个子窗体类型,其中下拉菜单和单选按钮是该子窗体中的选择类型。 家长表格:

class EmailCampaignExistingUsersForm extends AbstractForm{

public function buildForm(FormBuilderInterface $builder, array $options)
{  
    $this->existingUsers = [''];
    if(isset($options['data'])) {
        $this->existingUsers = $options['data']; 

    }
    $builder
            ->add(
            'newOrExistingUser',
            CollectionType::class,
            [
                'entry_type' => EmailCampaignExistingUsersType::class,
                'entry_options' => array(
                    'label' => false,
         ),
                'data' => [$this->existingUsers],
                'by_reference' => false,
                'allow_add' => false,
                'allow_delete' => false
            ]
        );                         
}

子类型:

class EmailCampaignExistingUsersType extends AbstractType{   

public function buildForm(FormBuilderInterface $builder, array $options) {     

    $builder
        ->add('newUser',
                ChoiceType::class,
                [
                    'label' => 'Create new user?',
                    'expanded' => true,
                    'multiple' => false,
                    'choices'  => [
                        'yes' => 1,
                        'no' => 0
                    ],
                ]
            )
        ->add('existing_user',
                CollectionType::class,
            [
                'entry_type' => ChoiceType::class,
                'entry_options' => array(
                    'label' => false
         ),
                'by_reference' => false,
                'allow_add' => false,
                'allow_delete' => false
            ]);

}

这是树枝:

<tbody>                               
{% for email, userArray in existingUsers  %}                                    
    <tr>
        <td colspan="3"><strong>{{ email }}</strong></td> 

        <td>{% for newUser in emailCampaignExistingUsersForm.newOrExistingUser  %}
        {{form_end(emailCampaignExistingUsersForm)}} {% endfor %}
        </td>

    </tr>
    {% for users in userArray %} 
        {% for user in users %} 
            <tr>
                <td>{{ user.getId() }}</td>   
                <td>{{ user.getName() }}</td>  
                <td>{{ user.getUserName() }}</td>

                <td>Add this one to the list  
                    {{form_end(emailCampaignExistingUsersForm)}}</td> 
            </tr>

        {% endfor %}
    {% endfor %}
{% endfor %}                            

enter image description here

到目前为止,它是这样呈现的:每个加粗电子邮件示例都需要具有“是/否”选项,并且每个用户都必须具有一个单选按钮,以便人们可以选择要在邮件合并中包括的用户帐户。

0 个答案:

没有答案