Symfony2 - 在parameters.ini中定义布尔参数

时间:2014-05-05 09:33:53

标签: php symfony

我在parameters.ini文件中定义布尔参数时遇到问题。这是定义:

aParameter = true

然后,在config.yml我做:

aParameter: %aParameter%

但是我收到了这个错误:

  

InvalidTypeException:路径“myService.aParameter”的类型无效。预期的布尔值,但得到了字符串。

%aParameter%替换为true时,此错误消失。我做错了什么?

4 个答案:

答案 0 :(得分:3)

YAML格式的默认Symfony2导入参数,因此第一行之一应为:

imports:
    - { resource: parameters.yml }

在parameters.yml中使用:

aParameter: true

我不使用INI文件,所以我不知道它是如何工作的。

答案 1 :(得分:3)

Symfony 2使用parse_ini_file()函数,似乎没有为布尔值返回正确的类型。

<?php

file_put_contents('test.ini', "test1=on\ntest2=true\ntest3=1");

var_dump(parse_ini_file('test.ini'));

将输出

array(3) {
  'test1' => string(1) "1"
  'test2' => string(1) "1"
  'test3' => string(1) "1"
}

您可能希望以ini为例,实现自己的Symfony\Component\DependencyInjection\Loader\IniFileLoader解析器。

支持布尔值的词法分析器的示例可以在php doc for parse_ini_file()的评论中找到

另一种方法是使用yaml格式作为配置文件。

答案 2 :(得分:2)

看起来没有办法实现它。见this issue。最简单的方法是用parameters.yml

替换你的parameters.ini

例如,来自symfony-standard

parameters.yml.dist

答案 3 :(得分:0)

在Symfony 3.4中,您可以“投射”它们。参见https://symfony.com/blog/new-in-symfony-3-4-advanced-environment-variables

parameters:
    # roughly equivalent to "(bool) getenv('BOOL_PARAM')"
    app.enable_something: '%env(bool:BOOL_PARAM)%'


bool:, int:, float: and string: