我是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