【问题标题】:How to get the current console command in Laravel如何在 Laravel 中获取当前控制台命令
【发布时间】:2015-11-06 18:28:01
【问题描述】:

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

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

我可以判断控制台命令是否正在运行,这很好,但我需要能够记录哪个控制台命令正在运行。

【问题讨论】:

    标签: php laravel laravel-5.1 laravel-artisan


    【解决方案1】:

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

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

    看看

    dd($_SERVER['argv']);
    

    如果您运行命令,这应该会在 $_SERVER['argv'][1]

    中为您提供命令名称

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

    【讨论】:

    • 是的,我希望您可以调用一些记录不充分的 laravel 功能(例如 App::currentCommand() 或其他东西)。在调用命令的命令实例中,我更愿意记录内部命令。
    • 当 laravel 执行一个命令时,它会更新它正在运行的进程的名称。如果你为你的命令设置了 $processTitle,你应该通过调用“cli_get_process_title()”来取回你放在那里的任何东西,只需确保您处于 CLI 模式即可。
    • 如果设置“受保护的 $processTitle = _ _ CLASS _ _;”你会得到你需要的东西,但我会称之为 hack,而不是功能。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-06-20
        • 2018-02-21
        • 2017-08-08
        • 2011-11-02
        • 1970-01-01
        • 2018-12-28
        • 1970-01-01
        • 2014-12-24
        • 2018-10-29
        相关资源
        最近更新 更多