我正在 symfony2 中创建一个控制台命令。我需要记录我运行的已执行行。怎么得到那条线?
所以如果我运行:
php app/console my-command fileName.txt --myoption=100
我想获取值“php app/console my-command fileName.txt --myoption=100”
谢谢你的帮助
我将问题解释为:在命令代码本身中,您想确定在命令行上写了什么,以便最终执行该 Symfony 命令?
如果这是正确的,那么我认为不可能完全得到它。但是,您应该能够通过执行以下操作获得 [几乎?] 相同的效果:
implode(" ", $_SERVER['argv'])
例子:
class SomeCommand extends ContainerAwareCommand
{
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln( implode(" ", $_SERVER['argv']) );
}
}
如果您查看 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)
你可以把它放在一根弦上。但这是在验证之后,所以如果你也需要记录错误的命令(我的意思是使用错误的参数等),这不会通过考试。
更好的解决方案是使用$input->__toString()
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->info(\sprintf('Executing %s', $input->__toString()));
}
您可以使用 Symfony Request 对象。
use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals();
foreach ($request->server->get('argv') as $arg) {
echo $arg;
}