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

时间:2015-08-13 16:50:15

标签: php laravel laravel-5.1 artisan

我可以通过App::runningInConsole()命令查看脚本是否在控制台中运行,但我想知道(出于审计日志记录的目的)从控制台运行了哪个命令。

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

我可以弄清楚控制台命令是否正在运行,这很好,但我需要能够记录正在运行的控制台命令。

3 个答案:

答案 0 :(得分:4)

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

然而,有一种方法可以使用普通的PHP实现这一点。您可以检查服务器/环境变量以确定应用程序的执行方式。

看看

dd($_SERVER['argv']);

如果您运行命令,则应在 $ _ SERVER [' argv'] [1]

中为您提供命令名称

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

$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(),您将获得所有带有属性的命令