PHP Laravel - 运行 使用来自命令的变量的控制器的最佳实践

PHP Laravel - Best practice to run controller with variable from command

我正在尝试在 Laravel 中设置一个命令,它应该每天 运行 在 18:30。

我在控制器中有一个函数,我希望 运行(这是放置只能从命令行 运行 的函数的正确位置吗?):

ReportController.php:

public function process($reportName)
{
   return("Function process has run correctly. Report: ".$reportName." ");
}

我已经创建了一个命令文件:

ProcessReports.php

namespace App\Console\Commands;

use App\Http\Controllers\ReportController;
use Illuminate\Console\Command;

class ProcessReports extends Command
{

    protected $signature = 'report:process {reportName}';
    protected $description = 'Process reports from FTP server';

    public function __construct()
    {
        parent::__construct();

    }
    public function handle()
    {
        //
        $ReportController = new ReportController(); 
        $ReportController->process($reportName);      
    }
}

此外,在我的 Kernel.php 我已经注册了我的命令:

Kernel.php:

 protected $commands = [
            'App\Console\Commands\ProcessReports',
 ];

 protected function schedule(Schedule $schedule)
 {
    $schedule->command('report:process MyReport')
               ->dailyAt('18:30');                        
 } 

然后我尝试 运行 我的命令,例如:$ php artisan report:process MyReport。但这是不可能的。它给了我这个错误:

Undefined variable: reportName

任何人都可以指导我如何创建命令,这些命令可以 运行 我的日常功能吗?

您需要先获取参数,将您的 handle() 方法更改为:

public function handle()
{
    //
    $reportName = $this->argument('reportName');
    $ReportController = new ReportController(); 
    $ReportController->process($reportName);      
}

文档:Artisan Command I/O