parameters.yml中的数字索引损坏了Symfony2

时间:2016-09-16 15:32:53

标签: php symfony yaml

我在我的parameters.yml中有几个月的数组,这些数字使得php函数日期(' m')(月号与前导零)之间的关系和默认选择的字母生成代码

months:
    01: 'A'
    02: 'B'
    03: 'C'
    04: 'D'
    05: 'E'
    06: 'F'
    07: 'G'
    08: 'H'
    09: 'I'
    10: 'J'
    11: 'K'
    12: 'L'

以下是var_dump($ this-> getParameters(' months'))的结果:

数组(大小= 11)
  1 =>字符串' A' (长度= 1)
  2 =>字符串' B' (长度= 1)
  3 =>字符串' C' (长度= 1)
  4 =>字符串' D' (长度= 1)
  5 =>字符串' E' (长度= 1)
  6 =>字符串' F' (长度= 1)
  7 =>字符串' G' (长度= 1)
  0 =>字符串' H' (长度= 1)
  10 =>字符串' J' (长度= 1)
  11 =>字符串' K' (长度= 1)
  12 =>字符串' L' (长度= 1)

我最终决定删除索引的前导零,但是有人知道为什么08被改为0和09索引消失了吗?

3 个答案:

答案 0 :(得分:2)

原因是,如果您不使用引号0102 ... 07将被解释为基数8(八进制),{{1} }和0809(无效的基数8),Invalid numeric literal被解释为整数,您需要使用引号来解决此问题:

10..12

请参阅此处的参考http://symfony.com/doc/current/components/yaml/yaml_format.html#numbers

答案 1 :(得分:1)

PHP使用0前缀表示后面的数字是八进制。因此8和9无效。

只需运行echo 08;echo 09;即可查看错误输出。

答案 2 :(得分:0)

这是整数字符串之间的差异。

01更改为'01',您的问题就解决了。

但为什么要在parameters.yml中存储所有字母字符?它似乎与环境无关,并且有一种简单的方法来获得相同的数组:

$alphas = range('A', 'L');