我是Symfony的新手。如何从控制台参数设置配置参数?
我试图通过控制台参数'format = json'来更改Monolog输出格式化程序。
总之,我想用的方式运行任何控制台命令:
app/console my_command --format=json # xml/txt/my own
...并获得所要求的格式LoggerInterface的输出。
例如,我设置了默认格式的配置:
monolog:
handlers:
console:
type: console
channels: [!event, !doctrine]
formatter: json_formatter
services:
json_formatter:
class: Monolog\Formatter\JsonFormatter
当我创建了一些MyEventListener :: onConsoleCommand(as described here),我不能改变参数包包,因为它已经被编:“不可能在一个冻结的ParameterBag上调用set()。“
UP2:在这种情况下,我的服务的配置是这样的:
services:
kernel.listener.command_dispatch:
class: My\Listener\MyEventListener
autowire: true
tags:
- { name: kernel.event_listener, event: console.command }
另一种方式,我可以在初始文件中注册控制台选项:
# app/console
$loader = require __DIR__.'/autoload.php';
# ...
$application->getDefinition()->addOption(
new InputOption(
'formatter',
'f',
InputOption::VALUE_OPTIONAL,
'The logs output formatter',
'json_formatter'
)
);
但我不能找到一种方法来更改Container中的参数包。因为$ application-> getKernel() - > getContainer()仍然是空的。
那么,如何从控制台输入更改Symfony2参数?
另外,也许我可以只使用一些环境参数?但是我怎样才能在YAML配置中获得一个环境变量?
谢谢。
UP3: 我曾与环境变量实现的目标是这样的:
SYMFONY__LOG__FORMATTER=json_formatter app/console my_command
monolog:
handlers:
console:
type: console
#...
formatter: '%log.formatter%'
好像'onConsoleCommand'是最便捷的方式。你可以添加更多的代码和配置尝试吗? – Ziumin
我没有问题从onConsoleCommand捕获变量。这个变体的主要问题是我无法在onConsoleCommand()中调用$ container-> setParameter('formatter','json_formatter') 因为这个问题:“不可能在一个冻结的ParameterBag上调用set() “。 – kivagant
我已经更新了onConsoleCommand()变体的问题并添加了服务配置。 – kivagant