Symfony - ChoiceType заполнен массивом - PullRequest
0 голосов
/ 04 февраля 2020

(извините за мой английский sh, я француженка ^^)

Я несколько дней пытался выбрать форму с несколько особенным ChoiceType. Я хочу, чтобы выбор содержал, например, все имена зоопарков Франции (которые зарегистрированы в моем BDD в объекте), но я хочу иметь возможность добавлять варианты, например, «Лаборатория», «Другие», например, иметь список зоопарков + лаборатория + другие в одном списке .... (Вот почему я не беру entityType, потому что я не хочу создавать таблицу только для них. Я бы хотел, чтобы это был отдельный выбор).

Итак, я начал с этого в моем formtype.

public function getZooName()
{

    $allZoos = $this->entityManager->getRepository(Zoo::class)->findAll();

    $zoosName = [];
    foreach ($allZoos as $zoo) {
        $zooName = $zoo->getName();
        $zoosName[$zooName] = $zoo->getName(); //If I don't do this, I have 0, 1, 2 ... in the select instead of the name
    }
        return $zoosName;
}

А затем в buildForm у меня есть:

->add('origin', ChoiceType::class, [
            'label' => false,
            'choices' => [
                 $this->getZooName(),
                'Labo'=>'LABO',
                'Autre'=>'AUTRE'    
            ], 
        ])

Это то, что у меня есть со всем этим ...

Я не понимаю, откуда взято "0" ... Поскольку я все еще новичок, я, конечно, сделал что-то не так! Спасибо !

1 Ответ

0 голосов
/ 04 февраля 2020

Значение параметра choices должно быть массивом. Вы передаете массив с тремя значениями: Labo, Autre и массив, возвращаемый getZooName().

Итак, у вас есть вот что:

$choices = [
    [
        'Paris Zoo' => 'Paris Zoo',
        'Lion Zoo' => 'Lion Zoo'
    ],
    'Labo' => 'LABO',
    'Autre' => 'AUTRE'
];

Что вам нужно сделать, это добавить Labo и Autre к результату getZooName()

$choices = $this->getZooName();
$choices['Labo'] = 'LABO';
$choices['Autre'] = 'AUTRE';

->add('origin', ChoiceType::class, [
            'label' => false,
            'choices' => $choices, 
        ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...