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

问题描述 投票:3回答:3

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

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

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

php laravel laravel-5.1 artisan
3个回答
4
投票

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

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

看一下

dd($_SERVER['argv']);

如果你运行一个命令,这应该给你$ _SERVER ['argv'] [1]中的命令名称

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


3
投票

要获得控制台命令和参数,您应该使用类似的东西:

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

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


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

© www.soinside.com 2019 - 2024. All rights reserved.