我正在symfony2中创建一个控制台命令。我需要记录我运行的执行行。如何获得这条线?
所以,如果我跑:
php app/console my-command fileName.txt --myoption=100
我想获得价值“php app / console my-command fileName.txt --myoption = 100”
感谢您的帮助
答案 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;
}