1

symfony2でコンソールコマンドを作成しています。実行した行をログに記録する必要があります。その行を取得する方法は?

だから私が実行した場合:

php app/console my-command fileName.txt --myoption=100

値「phpapp/console my-command fileName.txt --myoption=100」を取得したい

助けてくれてありがとう

4

4 に答える 4

2

私は質問を次のように解釈しています:コマンドコード自体の中で、そのSymfonyコマンドを実行するためにコマンドラインに何が書かれたかを判断したいですか?

それが正しければ、正確に入手することは不可能だと思います。ただし、これを行うことで[ほぼ?]同じ効果を得ることができるはずです。

implode(" ", $_SERVER['argv'])

例:

class SomeCommand extends ContainerAwareCommand
{
    protected function execute(InputInterface $input, OutputInterface $output)
    {       
        $output->writeln( implode(" ", $_SERVER['argv']) );
    }
}
于 2012-10-12T16:15:42.240 に答える
1

ArgvInputクラスを見ると、argv値がゲッターなしでプライベートプロパティに保持されていることに気付くかもしれません。基本的には、この情報にアクセスできないことを意味します。もちろん、$ _ SERVER ['argv']を直接使用することもできますが、これはあまりきれいな解決策ではありません。

ですから、あなたが望むものを正確に達成するための「クリーン」または「簡単」な方法はないようです。

ただし、必要なすべての情報にアクセスできます。

$this->getName(); // gets name of command (eg. "my-comand")
$input->getArguments(); // gets all arguments (eg. "fileName.txt")
$input->getOptions(); // get all options (eg. --myoption => 100)

あなたはそれを1つのストリングにまとめることができます。ただし、これは検証後なので、不正なコマンドのログも必要な場合(つまり、パラメーターが間違っているなど)、これは試験に合格しません。

于 2012-10-12T17:16:00.897 に答える
1

より良い解決策は、を使用することです$input->__toString()

protected function execute(InputInterface $input, OutputInterface $output)
{
    $this->info(\sprintf('Executing %s', $input->__toString()));
}
于 2018-09-11T16:10:12.867 に答える
0

SymfonyRequestオブジェクトを使用できます。

use Symfony\Component\HttpFoundation\Request;

$request = Request::createFromGlobals();
foreach ($request->server->get('argv') as $arg) {
 echo $arg;
}
于 2021-03-23T14:33:18.677 に答える