samlev
samlev

Reputation: 5942

How to get the current console command in Laravel

I can see if a script is running in the console with the App::runningInConsole() command, but I would like to know (for audit logging purposes) which command has been run from console.

To add some context - I need to log whenever a system or user accesses a certain type of data. For users, that's pretty simple - I can use Auth::user() and get their IP address from Request, but for console commands, it's a little more difficult.

I can figure out if a console command is running, which is good, but I need to be able to record which console command is running.

Upvotes: 10

Views: 6758

Answers (3)

Carlos Escobar
Carlos Escobar

Reputation: 101

The problem with $SERVER['arg'] is that it doesnt work when you execute the command on the GUI.

I fixed the problem adding the next code on the command.

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;
}

and you get it calling $this->getAttributes() and you will get all the command with the attributes

Upvotes: 1

Marcin Nabiałek
Marcin Nabiałek

Reputation: 111829

To get console command together with arguments you should use something like that:

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

In Laravel you can use \Request:server to get $_SERVER variables.

Upvotes: 6

jedrzej.kurylo
jedrzej.kurylo

Reputation: 40909

I do not see a way to get that information directly Laravel. I'm also not sure how that would be possible, as you can have one command executing other commands or even creating a new application instance like some test tools do.

There is however a way to achieve that using plain PHP. You can check the server/environment variables to identify how application was executed.

Have a look at

dd($_SERVER['argv']);

If you run a command this should give you the command name in $_SERVER['argv'][1]

You can find more information here: http://php.net/manual/en/reserved.variables.argv.php

Upvotes: 8

Related Questions