yaml/symfony2:覆盖配置
Posted
技术标签:
【中文标题】yaml/symfony2:覆盖配置【英文标题】:yaml/symfony2: Override configurations 【发布时间】:2012-05-08 01:31:01 【问题描述】:我想在我的 config_test.yml 中覆盖来自 config_dev.yml 的一些配置。因此,想象一下 config_dev.yml 中的以下部分:
monolog:
handlers:
main:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
firephp:
type: firephp
level: info
在我的测试环境中,我根本不需要记录器。所以我尝试了
monolog: ~
没有效果。我也试过了:
monolog:
handlers:
main: ~
firephp: ~
再次没有任何效果。然后我测试了
monolog:
handlers:
main:
type: ~
path: ~
level: ~
firephp:
type: ~
level: ~
我得到一个 ErrorException Couldn't find constant Monolog\Logger::
。如果有人能指出一种覆盖独白设置的方法,我将非常感激。谢谢!
【问题讨论】:
您要发布您的整个 config_test.yml 文件吗? 你应该在文件顶部的 config_test.yml 中输入 config_dev.yml。 这应该被命名为“禁用独白”。当然您想知道如何覆盖配置,但您的实际描述专门询问如何覆盖/禁用独白设置。 【参考方案1】:你试过了吗:
monolog:
handlers: ~
它应该可以工作(我认为)。 Look here 如果没有处理程序,则不会加载独白。
【讨论】:
也不走运。 test.log 照常写入。【参考方案2】:最好将处理程序定义为空数组:
monolog:
handlers: []
UPD1: logger 有特殊类型:test 和 null,您可以使用它们:
monolog:
handlers:
test:
type: test
level: debug
【讨论】:
不会改变任何东西。 test.log 一直被写入。 您的 UPD1 工作正常 :) 我摆脱了关卡并更改了类型:type: "none"
。我认为这比类型测试更容易理解,但行为是一样的!
更新所有处理程序以键入“test”。【参考方案3】:
如果您使用的是 Symfony2 标准版
你的 config_dev.yml
看起来像这样开箱即用独白:
# config_dev.yml
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: nested
nested:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
如您所见,这定义了处理程序main
和nested
,其中nested
仅用于main
引用。
config_dev.yml
是从config_test.yml
导入的,所以
如果要覆盖测试环境的配置,则需要覆盖 config_test.yml
中的 main
handler:
# config_text.yml
monolog:
handlers:
main:
type: test
这将阻止 monolog 创建日志文件。
【讨论】:
以上是关于yaml/symfony2:覆盖配置的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2 覆盖 Sonata 媒体图像提供程序。(将接口传递给构造函数)
Symfony / Fixtures “引用已经存在,使用方法 setReference 来覆盖它”