1

我正在 symfony2 中创建一个控制台命令。我需要记录我运行的已执行行。怎么得到那条线?

所以如果我运行:

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

我想获取值“php app/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 值保存在私有属性中,没有任何 getter。基本上这意味着您无法访问此信息。当然你可以直接使用 $_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)

你可以把它放在一根弦上。但这是在验证之后,所以如果你也需要记录错误的命令(我的意思是使用错误的参数等),这不会通过考试。

于 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

您可以使用 Symfony Request 对象。

use Symfony\Component\HttpFoundation\Request;

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