Создайте раскрывающийся список формы Symfony с двумя свойствами

Я пытаюсь создать форму Symfony с раскрывающимся списком, в котором используются два свойства.

Поясню: у меня есть объект SparePart с двумя свойствами:

/**
* @ORM\ManyToOne(targetEntity="CM\PlatformBundle\Entity\Supplier")
*/
private $supplier;

/**
* @ORM\ManyToOne(targetEntity="CM\PlatformBundle\Entity\SupplierGroup")
*/
private $supplierGroup;

Я хочу, чтобы пользователь мог выбирать между одним прямым поставщиком или группой поставщиков, например:

  1. ----DIRECT SUPPLIERS----
    • Michelin
    • Континентальный
  2. ----GROUP OF SUPPLIERS----
    • European suppliers
    • американские поставщики

Я не знаю, как справиться с такой ситуацией в конструкторе форм.


person Hugo    schedule 14.02.2016    source источник


Ответы (1)


Вам необходимо определить форму как службу (http://symfony.com/doc/current/book/forms.html#defining-your-forms-as-services) и внедряете в него менеджер сущностей. Перед созданием формы вы запрашиваете свой репозиторий, чтобы получить ваших поставщиков.

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $suppliers = $this->em->repository->findAll();

        //loop through your results to build an array

        $builder
            …
        ;
    }

Создайте массив, соответствующий этому шаблону

$arrSuppliers[$groupName] = array($supplierId => $supplierName);

И затем вы можете сделать это, чтобы создать свой список:

http://symfony.com/doc/current/reference/forms/types/choice.html#grouping-options

person Hakim    schedule 15.02.2016
comment
Спасибо, Хаким, я попробую как можно скорее. - person Hugo; 15.02.2016
comment
Мне удалось создать массив вне типа формы, я просто передаю его через аргумент $options. Однако я не знаю, как добавить свой массив в мою форму. Можете ли вы показать мне пример, пожалуйста? - person Hugo; 16.02.2016
comment
если ваш массив сформирован правильно, этот $builder->add('stockStatus', ChoiceType::class, array( 'choices' => $yourArray) ); должен работать - person Hakim; 16.02.2016
comment
Спасибо ! Наконец получил! У меня просто были проблемы, потому что это было несопоставленное поле, поэтому мне пришлось добавить: ->add('supplierr', 'choice', array( 'choices' => $suppliersList,"mapped" => false,)) Теперь мне будет интересно проверить это: p - person Hugo; 16.02.2016