Как получить Artisan :: call ('command: name') вывод в переменную? - PullRequest
1 голос
/ 14 октября 2019

Можно ли получить вывод в $ следующим образом:

$output = Artisan::call('command:name');

Я пробовал много решений в разных постах, но он не работал на моем Laravel 5.2.

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Вы можете вызвать метод output в Artisan

Artisan::call('command:name');
$output = Artisan::output();

Убедитесь, что вы используете один из доступных методов вывода, например $this->line('output');, в фактической команде Artisan. Больше информации в документах .

0 голосов
/ 14 октября 2019

Есть несколько способов сделать это, но поскольку вы используете такую ​​старую версию Laravel, возможно, лучшим для вашего случая будет тот, который не потребует переписывания, когда вы наконец перейдете на более новую версию. Возможно, вы пробовали ванильные методы PHP system, shell_exec и passthru?

  • system вернут только последнюю строку команды в случае успеха иFALSE при ошибке
  • shell_exec вернет весь вывод, но без способа получить код состояния выхода
  • passthru не будетверните любой вывод, вместо этого он выведет все на stdout. Хотя его можно поместить в переменную, используя методы кэша вывода (например, ob_start и ob_get_contents)

В любом случае вы должны вызывать эти методы, используя в качестве аргумента версию CLI команды, которую вы хотитедля запуска:

$output = shell_exec("php artisan command:here");

PS Если у вас случайно есть пользовательский ввод, который вы хотите передать в качестве параметра для команды ремесленника, убедитесь, что вы сначала экранировали его с помощью escapeshellcmd.

...