在laravel 5中运行artisan命令

par*_*oid 19 php laravel laravel-5 artisan laravel-5.2

我有这样的控制器

 public function store(Request $request)
{
   Artisan::call("php artisan infyom:scaffold {$request['name']} --fieldsFile=public/Product.json");
}
Run Code Online (Sandbox Code Playgroud)

告诉我错误

"php artisan infyom"命名空间中没有定义命令.

当我在CMD中运行此命令时,它可以正常工作

Ale*_*nin 34

您需要删除php artisan零件并将参数放入数组中以使其工作:

public function store(Request $request)
{
   Artisan::call("infyom:scaffold", ['name' => $request['name'], '--fieldsFile' => 'public/Product.json']);
}
Run Code Online (Sandbox Code Playgroud)

https://laravel.com/docs/5.2/artisan#calling-commands-via-code


小智 12

如果你有简单的工作要做,你可以从路由文件中完成。例如你想清除缓存。在终端中它将是php artisan cache:clear在路由文件中将是:

Route::get('clear_cache', function () {

    \Artisan::call('cache:clear');

    dd("Cache is cleared");

});
Run Code Online (Sandbox Code Playgroud)

要从浏览器运行此命令,只需转到您的项目路径和 clear_cache。例子:

http://project_route/clear_cache
Run Code Online (Sandbox Code Playgroud)


Mah*_*our 5

除了另一个命令之外,我不太确定我能想出这样做的好理由。但是如果你真的想从控制器(或模型等)调用 Laravel 命令,那么你可以使用Artisan::call()

Artisan::call('email:send', [
        'user'    => 1,
        '--queue' => 'default'
]);
Run Code Online (Sandbox Code Playgroud)

直到我用 Google 搜索以获得正确的语法之前,我才意识到一个有趣的功能Artisan::queue(),它将在后台处理命令(由队列工作人员):

Route::get('/foo', function () {
    Artisan::queue('email:send', [
        'user'    => 1,
        '--queue' => 'default'
    ]);
    //
});
Run Code Online (Sandbox Code Playgroud)

如果您从另一个命令中调用一个命令,则不必使用该Artisan::call方法 - 您可以执行如下操作:

public function handle()
{
    $this->call('email:send', [
        'user'    => 1,
        '--queue' => 'default'
    ]);
    //
}
Run Code Online (Sandbox Code Playgroud)

来源:https ://webdevetc.com/programming-tricks/laravel/general-laravel/how-to-run-an-artisan-command-from-a-controller/