在laravel 5中运行artisan命令

时间:2016-05-15 08:45:03

标签: php laravel laravel-5 laravel-5.2 artisan

我有这样的控制器

removeIf

显示错误

  

“php artisan infyom”命名空间中没有定义命令。

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

4 个答案:

答案 0 :(得分:24)

您需要删除php artisan部分并将参数放入数组中才能使其正常工作:

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

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

答案 1 :(得分:0)

如果您要完成简单的工作,则可以从路由文件中执行。例如,您要清除缓存。在终端中,将是 php artisan cache:clear 在路由文件中将是:

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

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

    dd("Cache is cleared");

});

要从浏览器中运行此命令,只需转到您的项目路径并进入clear_cache。示例:

http://project_route/clear_cache

答案 2 :(得分:0)

命令作业,

路径:{project-path} /app/Console/Commands/RangeDatePaymentsConsoleCommand.php

这是与artisan命令一起运行的Job。

class RangeDatePaymentsConsoleCommand extends Command {
    protected $signature = 'batch:abc {startDate} {endDate}';
    ...
}

web.php,

路径:{project-path} /routes/web.php

web.php管理所有请求并路由到相关的Controller,并且可以具有多个路由,用于多个控制器和同一控制器内的多个功能。

$router->group(['prefix' => 'command'], function () use ($router) {
    Route::get('abc/start/{startDate}/end/{endDate}', 'CommandController@abc');
});

CommandController.php,

路径:{project-path} /app/Http/Controllers/CommandController.php

此控制器是为处理工匠命令而创建的,名称可以更改,但应与web.php控制器名称和函数名称相同。

class CommandController extends Controller {

    public function abc(string $startDate, string $endDate) {
        $startDate = urldecode($startDate);
        $endDate = urldecode($endDate);

        $exitCode = Artisan::call('batch:abc',
            [
                'startDate' => $startDate,
                'endDate' => $endDate
            ]
        );
        return 'Command Completed Successfully. ';
    }

请求:http://127.0.0.1:8000/command/abc/start/2020-01-01 00:00:00 / end / 2020-06-30 23:59:59

启动服务器后,可以通过Web浏览器或邮递员进行访问。运行此命令以在 {project-path}

处启动php服务器。
php -S 127.0.0.1:8080 public/index.php

答案 3 :(得分:0)

除了在另一个命令中,我不太确定我能想出一个很好的理由来这样做。但是如果你真的想从控制器(或模型等)调用 Laravel 命令,那么你可以使用 [l, u]

def transform(n, lower, upper):
    interval = [lower * 0.25, upper * 0.9]
    if n in interval:
        return n
    else if n < lower * 0.25:
        return lower * 0.25
    else if n > upper * 0.9:
        return  upper * 0.9

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

Artisan::call('email:send', [
        'user' => 1, '--queue' => 'default'
]);

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

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

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