symfony2获取命令行执行

时间:2012-10-12 15:37:45

标签: php symfony

我正在symfony2中创建一个控制台命令。我需要记录我运行的执行行。如何获得这条线?

所以,如果我跑:

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

我想获得价值“php app / console my-command fileName.txt --myoption = 100”

感谢您的帮助

4 个答案:

答案 0 :(得分:1)

我正在将问题解释为:在命令代码本身中,您想确定在命令行上写入的内容以便最终执行Symfony命令?

如果这是正确的,那么我认为不可能完全得到它。但是,你应该能够通过这样做得到[几乎?]相同的效果:

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

示例:

class SomeCommand extends ContainerAwareCommand
{
    protected function execute(InputInterface $input, OutputInterface $output)
    {       
        $output->writeln( implode(" ", $_SERVER['argv']) );
    }
}

答案 1 :(得分: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)

您可以将它们组合成一个字符串。但这是在验证之后,所以如果您还需要记录错误的命令(我的意思是错误的参数等等),这不会通过考试。

答案 2 :(得分:0)

更好的解决方案是使用$input->__toString()

protected function execute(InputInterface $input, OutputInterface $output)
{
    $this->info(\sprintf('Executing %s', $input->__toString()));
}

答案 3 :(得分:0)

您可以使用 Symfony 请求对象。

use Symfony\Component\HttpFoundation\Request;

$request = Request::createFromGlobals();
foreach ($request->server->get('argv') as $arg) {
 echo $arg;
}