如何在 Laravel 中获取当前控制台命令

How to get the current console command in Laravel

我可以使用 App::runningInConsole() 命令在控制台中查看脚本是否 运行ning,但我想知道(出于审计日志目的)哪个命令已被 运行 来自控制台。

要添加一些上下文 - 我需要在系统或用户访问特定类型的数据时进行记录。对于用户来说,这很简单——我可以使用 Auth::user() 并从 Request 获取他们的 IP 地址,但对于控制台命令,这有点困难。

我可以弄清楚控制台命令是否是 运行ning,这很好,但我需要能够记录 哪个 控制台命令是 运行宁.

我没有找到直接获取该信息的方法Laravel。我也不确定这怎么可能,因为您可以让一个命令执行其他命令,甚至可以像某些测试工具那样创建一个新的应用程序实例。

然而,有一种方法可以使用普通 PHP 来实现。您可以检查 server/environment 变量以确定应用程序的执行方式。

看看

dd($_SERVER['argv']);

如果你运行一个命令这应该给你在$_SERVER['argv'][1]

中的命令名称

您可以在此处找到更多信息:http://php.net/manual/en/reserved.variables.argv.php

要将控制台命令与参数一起使用,您应该使用类似的东西:

$command = \Request::server('argv', null);
if (is_array($command)) {
   $command = implode(' ', $command);
}

在 Laravel 中,您可以使用 \Request:server 获取 $_SERVER 个变量。

$SERVER['arg'] 的问题是在 GUI 上执行命令时它不起作用。

我解决了在命令中添加下一个代码的问题。

private function getAttributes() 
{
    $arguments = $this->arguments();
    unset($arguments[0]);
    $arguments = collect($arguments)->implode(' ');
    $options = collect($this->options())->filter(function($item) {
        return $item;
    })->map(function($item, $key) {
        $return = '--'.$key;
        if($item!==true) {
            $return .= '='.$item;
        }
        return $return;
    })->implode(' ');
    return $arguments.' '.$options;
}

你得到它调用$this->getAttributes()你会得到所有带有属性的命令