私はSymfonyの初心者です。コンソール引数からconfigパラメータを設定する方法は?
コンソール引数 '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()を呼び出してください。
アップ2:この場合、私のサービスの設定は次のようになります。
# app/console
$loader = require __DIR__.'/autoload.php';
# ...
$application->getDefinition()->addOption(
new InputOption(
'formatter',
'f',
InputOption::VALUE_OPTIONAL,
'The logs output formatter',
'json_formatter'
)
);
しかし、私はできません。別の方法で
services:
kernel.listener.command_dispatch:
class: My\Listener\MyEventListener
autowire: true
tags:
- { name: kernel.event_listener, event: console.command }
、私は最初のファイル内にconsoleオプションを登録することができますコンテナ内のパラメータバッグを変更する方法を見つける。 $ application-> getKernel() - > getContainer()はまだ空です。
したがって、コンソール入力からSymfony2パラメータを変更するにはどうすればよいですか?
また、いくつかの環境パラメータを使用できますか?しかし、YAML設定で環境変数をどのように得ることができますか?
ありがとうございます。
UP3: 私はこのような環境変数を使用して目標を達成している:ここで
SYMFONY__LOG__FORMATTER=json_formatter app/console my_command
monolog:
handlers:
console:
type: console
#...
formatter: '%log.formatter%'
。いくつかのコードを追加して、それを試すことができますか? – Ziumin
私はonConsoleCommandから変数をキャッチするのに問題はありません。この変種の主な問題は、onConsoleCommand()内で$ container-> setParameter( 'formatter'、 'json_formatter')を呼び出すことができないことです。 その問題のために: "固定ParameterBagでset()を呼び出すことはできません" – kivagant
onConsoleCommand()バリアントの質問とサービス設定を更新しました。 – kivagant