Php 通过不工作的代码调用Artisan命令 描述
在我的Laravel应用程序中,我运行Php 通过不工作的代码调用Artisan命令 描述,php,laravel,laravel-5,Php,Laravel,Laravel 5,在我的Laravel应用程序中,我运行 php artisan languages:export 基于我的语言表,我成功导出了一个csv文件 但目标是利用Laravel的这一点,但当我在代码中这样做时 $export = Artisan::call('languages:export'); 结果 由于$export变量,我一直得到0——当然没有导出文件 更新 现在我尝试通过shell\u exec()和exec()调用它 我看不到任何一个上生成任何内容 从命令行界面,我运行 php/Ap
php artisan languages:export
基于我的语言
表,我成功导出了一个csv
文件
但目标是利用Laravel的这一点,但当我在代码中这样做时
$export = Artisan::call('languages:export');
结果 由于
$export
变量,我一直得到0
——当然没有导出文件
更新 现在我尝试通过
shell\u exec()和exec()调用它
我看不到任何一个上生成任何内容
从命令行界面,我运行
php/Applications/MAMP/htdocs/code/artisan语言:导出
我看到我的csv文件生成了
如何通过代码调用artisan命令?您也可以使用php artisan语言:export
作为参数来尝试该函数。在这种情况下,您可能需要在命令前面包含正确的路径
我还找到了函数而不是调用,也许这样行吗?尝试通过调用来检查输出
dd(Artisan::output())代码>
之后
$export=Artisan::call('languages:export')代码>您的console命令不会以这种方式返回CSV文件,因为console命令不是这样工作的。您得到0
这一事实实际上是一件好事(这意味着它在没有抛出错误的情况下完成)
你的电话是对的,是你的期望错了。您需要改变您的方法,无论您是如何使用$export
。如果要实际访问新创建的CSV,请查看phpleague/CSV
包和/或内置的fopen
命令。如果您只是想知道它是否成功完成,那么就将该0
视为成功。Artisan:call()支持$outputBuffer参数,是否尝试
$parameters = [];
$outputBuffer = null;
Artisan::call('languages:export', $parameters, $outputBuffer);
我可以试试,但实际的目标是让它与LaravelArtisan::call一起工作。
…看到我的更新,我试过了,但它似乎没有调用它。好的。我可以试试。Artisan::output()以cli的形式提供精确的输出,你救了我一天!!!感谢API文档,Artisan::call
的结果是一个int。我怀疑这是一个退出代码,零表示成功完成。@ceejayoz:感谢您的详细阐述和纠正我的想法。我仍然很好奇,为什么只有通过命令行运行Artisan命令,它才能工作,但是不在代码内部。Artisan::call
和php-Artisan
在幕后是不同的。它们做相似的事情,但打算以不同的方式使用,相应地,行为也不同。@i通过应用程序运行Artisan::call
命令的用户是否有权创建和写入该csv文件位置?听起来像是权限问题。您是否尝试创建自定义artisan命令创建单个文件来测试此功能?感谢您纠正我的想法和期望。但我还有一个疑问。为什么我需要查看phpleague/csv?我的代码已经做到了。我已经知道怎么做了。当我在CLI上运行这个php artisan languages:export时,它可以工作,只有当我从代码运行它时,它才不工作。它与我导出文件的方式无关。我之所以提到它,是因为它是读取和写入CSV文件的好工具。
$parameters = [];
$outputBuffer = null;
Artisan::call('languages:export', $parameters, $outputBuffer);