我可以通过App::runningInConsole()
命令查看脚本是否在控制台中运行,但我想知道(出于审计日志记录的目的)从控制台运行了哪个命令。
添加一些上下文 - 我需要在系统或用户访问某种类型的数据时进行记录。对于用户来说,这非常简单 - 我可以使用Auth::user()
并从Request
获取他们的IP地址,但是对于控制台命令,这有点困难。
我可以弄清楚控制台命令是否正在运行,这很好,但我需要能够记录正在运行的控制台命令。
答案 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()
,您将获得所有带有属性的命令