有谁知道为什么Symfony ChoiceType选择列表将标签保持为数组键而不是值?

时间:2017-07-31 12:20:44

标签: php symfony choice

有谁知道为什么Symfony ChoiceType选择列表将标签保留为数组键而不是值?

我看了,但无法找到该决定背后的原因。由于选项标签可能包含许多特殊字符并且相当长,而在大多数情况下,选择值是用于枚举类型的int或小字符串。

1 个答案:

答案 0 :(得分:1)

这背后的原因与PHP如何处理某些值如null和布尔值作为数组键有关。这将导致不一致的行为:

php > $a = [true => 'Yes', false => 'No', null => 'Empty'];
php > var_dump($a);
array(3) {
  [1]=>
  string(3) "Yes"
  [0]=>
  string(2) "No"
  [""]=>
  string(8) "Empty"
}

php > $a = [false => 'Empty', 0 => 'No', 1 => 'Yes', 2 => 'Maybe'];
php > var_dump($a);
array(3) {
  [0]=>
  string(2) "No"
  [1]=>
  string(3) "Yes"
  [2]=>
  string(5) "Maybe"
}

正如您在第二个示例中所看到的,这甚至可能导致密钥被意外覆盖。为了避免这些问题,Symfony决定将值/标签映射反转为标签/值,因为标签几乎总是字符串,因此可以比值更可靠地处理。

如果您遇到长标签名称的问题,您可以使用使用翻译组件扩展到长版本的简短翻译键。