Как получить экземпляр Entity поля EntityType внутри шаблона ветки в Symfony - PullRequest
0 голосов
/ 27 апреля 2020

У меня сейчас проблема с восстановлением нужных мне данных, и я очень надеюсь, что вы сможете мне помочь. Я пытаюсь создать форму через Symfony formbuilder, чтобы создать объект, который я называю Site. Этот объект содержит пользователей для заполнения формы. Для этого я go через Symfony тип сущности, чтобы получить моих пользователей из базы данных. Я хорошо их выздоравливаю. Однако я хотел бы не просто отображать имя каждого проверяемого пользователя, но в дополнение к этому я хотел бы отобразить их данные, такие как адрес, номер телефона и т. Д. 1019 *, в таблице HTML с несколькими столбцами. Однако я не могу восстановить объекты моих пользователей в моем представлении со всеми их свойствами для передачи. Я могу просто ввести метку, отображающую несколько сведений, которые я не могу поместить в таблицу. Для получения информации пользователи имеют отношение многих ко многим. У вас есть идея, чтобы все мои пользователи могли просматривать объект, а не передавать ему только строку? Вот мой код:

 $builder
            ->add('name')
            ->add('adress')
            ->add('postalCode')
            ->add('city')
            ->add('phoneNumber')
            ->add('observations')
            ->add('country', EntityType::class, [
                'class' => Country::class,
                'choice_label' => 'name',
                'by_reference' => false
            ])
            ->add('devise', EntityType::class, [
                'class' => Devise::class,
                'choice_label' => 'symbol',
            ])
            ->add('timezone', EntityType::class,[
                'class' => TimeZone::class,
                'choice_label' => 'name',
                'by_reference' => false
            ])
            ->add('users', EntityType::class ,
                [
                    // looks for choices from this entity
                    'class' => User::class,
                    'choice_label' =>  function (User $user) {
                        return $user->getFirstName() .' ' . $user->getLastName();
                    },
                    'choices' =>  $this->userRepository->getUsersWithRoleBellowUserByCustomer($customer, $creator) ,
                    'multiple' => true,
                    'expanded' => true,
                    'by_reference' => false
                ])
            ->add('criterions',EntityType::class ,
                [
                    // looks for choices from this entity
                    'class' => Criterion::class,
                    'choice_label' => 'name',
                    'multiple' => true,
                    'expanded' => true,
                    'by_reference' => false
                ])
            ->add('tags',EntityType::class ,
                [
                    // looks for choices from this entity
                    'class' => Tag::class,
                    'choice_label' => 'name',
                    'multiple' => true,
                    'expanded' => true,
                    'by_reference' => false
                ])

, и я хотел бы что-то подобное на мой взгляд:

{{ form_start(form) }}



<table>
    <tbody>
    <tr>
        <td>Name</td>
        <td>Firstname</td>
        <td>Adress</td>
    </tr>
    <tr>

        {% for userField in form.users %}
            <td>
                userField.name
                userField.firstName
                userField.adress
            </td>
        {% endfor %}
    </tr>
    </tbody>
</table>

    <button class="btn">{{ button_label|default('Save') }}</button>
{{ form_end(form) }}

Вот что я получаю, когда я делаю дамп user.vars после создание foreach для form.users

https://i.stack.imgur.com/fi9k1.png

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

То, что вы ищете, это choice_attr опция

//...
        ->add('yourfield', EntityType::class, [
            'class' => YourEntity::class,
            'choice_label' => 'the_field_you_want_as_label',
            'multiple' => true,
            'expanded' => true,
            'choice_value' => 'id',
            'choice_attr'  => function (YourEntity $entity) {
                return [
                    'data-foo' => $entity->getBar(),
                ];
            }
        ])

Затем вы можете настроить свой вход в свой шаблон и иметь дело со значением вашего свойства

0 голосов
/ 28 апреля 2020

Я думаю, вам следует связать событие Jquery с вашим полем EntityType и создать запрос Ajax для получения необходимой информации.

Что-то вроде:

$('#form_user_field').on('change', function(){
     var userId = $(this).val()
     $.ajax
         your ajax request
         success:function(user){
             change table content
         }
}
...