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

时间:2018-07-19 10:49:26

标签: php laravel artisan

我正在尝试在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。但这是不可能的。它给了我这个错误:

  

未定义的变量: reportName

有人可以指导我如何创建可以每天运行我的函数的命令吗?

1 个答案:

答案 0 :(得分:1)

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

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

文档:Artisan Command I/O