2017-02-07 4 views
2

Я разрушал свой мозг, переходя из 2.7.x документов, все на 3.2, на которых я нахожусь, и я не понимаю, почему они удалили choices_as_values. Это именно то, что мне нужно.Symfony (3.2) 'ChoiceType - клавиша/значения?

В это время у меня есть вход (не спрашивайте почему) с 3 значениями, 2 из которых имеют одно и то же имя/метку. Это то, чего хочет клиент, и после долгих обсуждений мне просто пришлось согласиться. Так, например, у меня есть следующие:

1 => Name 
2 => Name 
3 => Other Name 

Однако, Symfony хочет он получил так:

Name => 1 
Name => 2 
Other Name => 3 

Вы можете увидеть проблему, результирующий массив станет:

Name => 2 
Other Name => 3 

Мне не хватает ОДНОГО значения. Итак, каков правильный путь? Я пробовал множество решений, никто из них не работал. Имейте в виду, что итоговое значение после отправки должно быть 1, 2 или 3.

ответ

2

Причина в том, что PHP допускает, чтобы целые числа и строки являлись ключами массива, тогда как фактические значения выбора могли быть произвольными типами PHP. Как правило, метки уникальны, поскольку дублирующиеся ключи, скорее всего, путают пользователей, поэтому их легко использовать в качестве ключей значения опций choices.

В любом случае, если вам нужны этикетки должны быть дублированы, вы можете передать функцию обратного вызова в choice_label, который будет возвращать метку, которая будет отображаться:

$builder->add(ChoiceType::class, null, [ 
    'choices' => [ 
     1, 
     2, 
     3, 
    ], 
    'choice_label' => function ($value) { 
     switch ($value) { 
      case 1: 
       return 'Name'; 
      case 2: 
       return 'Name'; 
      case 3: 
       return 'Other Name'; 
      default: 
       return ''; 
     } 
    }, 
]); 
Смежные вопросы