2016-12-22 4 views
0

私はカスタムコマンドを作成しました。私はモノローグでexempleの引数とオプションsymfonyコマンドがモノラルでタップ

でユーザーがタップコマンドをログに記録します:php bin/console app:my_command argument1 --option=1234

今私がいることがあります。

 $this->log->error('error on command', array(
      'command_tapped_by_user' => '????', 
      'command' => $this->getName(), 
      'arguments' => $input->getArguments(), 
      'options' => $input->getOptions(), 
      'exception' => $e->getMessage() 
     )); 

は、すべての引数が渡さあなた

答えて

2

ありがとうございましたPHPスクリプトは$argv配列で利用できます。最初の要素はスクリプト名です。これは "スーパーグローバル"配列ではなく、symfonyコマンド(または他の関数またはメソッド)では、$GLOBALSの要素またはglobalキーワードの要素として使用できます。元のコマンドは、空白文字で分割されます。それを復元するには、あなたがそれらをバックに参加する必要があります(あなたが奇なるしている場合と)

echo join(' ', $GLOBALS['argv']); 

をまた、あなたはOSの依存関係を心配されていない場合は、システムの機能を使用することができます。例えば、Linux環境での現在のコマンドラインを/proc/$PID/cmdlineに保存されています。

$pid = getmypid(); 
$cmd = file_get_contents("/proc/$pid/cmdline"); 
// Arguments are splitted by NULL bytes that we replace by space character: 
echo str_replace("\0", " ", $cmd); 
+1

'symfonyの/ Console'を使用しての実際の目的は、このような技術的な詳細を非表示にすることです。 Symfonyを使用している間は、[ArgvInput'](https://github.com/symfony/console/blob/master/Input/ArgvInput.php)などのユーティリティを使用することをお勧めします。 –

+0

あなたはそれを忘れていますクラス。メソッド '__toString()'がタスクに適しているようです。 – Timurib

関連する問題