2015-08-13 2 views
2

Я вижу, работает ли скрипт в консоли с помощью команды App::runningInConsole(), но я хотел бы знать (для целей ведения журнала аудита), какая команда была запущена с консоли.Как получить текущую консольную команду в Laravel

Чтобы добавить некоторый контекст - мне нужно регистрироваться всякий раз, когда система или пользователь обращаются к определенному типу данных. Для пользователей это довольно просто - я могу использовать Auth::user() и получить их IP-адрес от Request, но для консольных команд это немного сложнее.

Я могу выяснить, работает ли консольная команда, что хорошо, но мне нужно записать , с которой работает консольная консоль.

ответ

2

Я не вижу способ получить эту информацию напрямую Laravel. Я также не знаю, как это возможно, поскольку вы можете иметь одну команду, выполняющую другие команды, или даже создать новый экземпляр приложения, как это делают некоторые средства тестирования.

Существует, однако, способ достичь этого, используя простой PHP. Вы можете проверить переменные сервера/среды, чтобы определить, как приложение было выполнено.

Посмотрите

dd($_SERVER['argv']); 

Если вы запускаете команду, это должно дать вам имя команды в $ _SERVER [ «ARGV»] [1]

Вы можете найти более подробную информацию здесь : http://php.net/manual/en/reserved.variables.argv.php

+0

Да, я надеялся, что есть некоторая плохо документированная функция laravel, которую вы могли бы назвать (например, «App :: currentCommand()» или что-то еще). В случае команды, вызывающей команду, я бы предпочел зарегистрировать внутреннюю команду. – samlev

+1

Когда laravel выполняет команду, он обновляет имя процесса, в котором он запущен. Если вы установите $ processTitle для своей команды, вы должны вернуть все, что вы там положили, вызвав «cli_get_process_title()», просто убедитесь, что вы находитесь в CLI Режим. –

+1

Если вы установите «protected $ processTitle = _ _ CLASS _ _;» вы получите то, что вам нужно, но я бы назвал это взломом, а не особенностью. –

2

Чтобы получить консольную команду вместе с аргументами вы должны использовать что-то вроде этого:

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

В Laravel вы можете использовать \Request:server, чтобы получить $_SERVER переменных.

Смежные вопросы