ChoiceType, встроенный в CollectionType, рендерится только один раз - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь добавить несколько переключателей в раздел слияния в веб-приложении.Если пользователь импортирует csv электронных писем, и электронные письма уже сопоставлены существующему пользователю, ему предоставляется возможность создания новой учетной записи пользователя или использования одного из электронных писем, уже связанных с пользователем.Если они выбирают «Нет» в раскрывающемся списке, чтобы не добавлять нового пользователя, я хочу, чтобы рядом с доступными учетными записями пользователей отображался переключатель.Проблема в том, что я не могу получить выпадающий / радио для каждого пользователя.

Я пробовал родительскую форму с 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

Это то, как он рендерится до сих пор: ему нужно иметь опции Да / Нет для каждого примера, выделенного жирным шрифтом, и переключатель для каждого пользователя, чтобы люди могли выбирать, какая учетная запись пользователявключить на почту слияние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...