通过代码调用Artisan命令不工作

时间:2017-06-28 20:36:41

标签: php laravel laravel-5

描述

在我的Laravel应用程序中,我运行

php artisan languages:export

我根据csv表格成功导出languages个文件。

但目标是利用Laravel中的Artisan::call,但是当我在我的代码中执行此操作时

$export = Artisan::call('languages:export');

结果

我不断收到0作为$export变量的结果 - 当然没有导出文件

更新

现在我尝试通过shell_exec() and exec()

来调用它
$cmd = 'php '.base_path().'/artisan languages:export';
$export = shell_exec($cmd);

我发现任何一个都没有生成。

从命令行界面,我运行

  

php / Applications / MAMP / htdocs / code / artisan languages:export

我看到了我的csv文件。

如何通过代码调用artisan命令?

4 个答案:

答案 0 :(得分:8)

您的控制台命令不会以这种方式返回CSV文件,因为这不是控制台命令的工作方式。您获得0这一事实实际上是一个好的控制台土地(这意味着它完成而不会抛出错误)。

你的电话是正确的,你的期望是错的。您需要更改自己的方法,但是您需要使用$export。如果要实际访问新创建的CSV,请查看phpleague/csv包和/或内置fopen命令。如果您只是想知道它已成功完成,那么只需取消0即可。

答案 1 :(得分:7)

尝试通过调用来检查输出 dd(Artisan::output());$export = Artisan::call('languages:export');

答案 2 :(得分:4)

您还可以使用php artisan languages:export作为参数尝试exec()函数。在这种情况下,您可能需要在命令前面包含正确的路径。

我还发现函数Artisan::command而不是调用,也许这有用吗?

答案 3 :(得分:0)

Artisan:call()支持$ outputBuffer参数,您尝试吗?

$parameters = [];
$outputBuffer = null;
Artisan::call('languages:export', $parameters, $outputBuffer);