如何在 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()
你会得到所有带有属性的命令
我可以使用 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()
你会得到所有带有属性的命令