在使用lumen运行cron时:在“插入”名称空间中未定义任何命令。

时间:2018-11-19 09:52:35

标签: php laravel lumen

我已经在lumen(laravel的微型框架)中为cron命令编写了代码

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\EmailDump;
use DB;

/**
 * dumpEmails Class
 *
 * This cron is to dump emails with cron use
 *
 * @author Hetal Gohel <hetal.gohel@brainvire.com>
 *
 */

class dumpEmails extends Command {

    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'insert:emails';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'This cron is to dump emails with cron use';

    /**
     * Create a new command instance.
     *
     * @return void
     */

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

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    { 
       echo "1";die;       
    }
}

在如下定义的内核文件中,

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Laravel\Lumen\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \Laravelista\LumenVendorPublish\VendorPublishCommand::class,
        '\App\Console\Commands\dumpEmails',
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
//    protected function schedule(Schedule $schedule)
//    {
//        return $schedule;
//    }
}

我从控制台触发了如下命令,

php artisan insert:emails

运行此命令时出现如下错误,

[Symfony \ Component \ Console \ Exception \ CommandNotFoundException]←[39; 49m ←[37; 41m“插入”名称空间中没有定义命令。

请帮助我解决此问题。谢谢。

1 个答案:

答案 0 :(得分:1)

请删除__construct并仅保留handle方法。

此外,当您在$commands at Kernel下列出时,您需要指定类别。

所以你

`\App\Console\Commands\dumpEmails`

成为

    DumpEmails::class

一些其他提示:

  1. 类名大写; (dumpEmails-> DumpEmails)
  2. {添加到新行;

class dumpEmails extends Command {

应该是

class DumpEmails extends Command
{

我还建议您查看有关PSR-x standards的信息。我离开了其中一个博客,我认为这可能会帮助您开始使用它们,但请继续! :)

最后但并非最不重要的是,不要忘记Command父级已经可以让您使用其命令行功能。因此,如果您希望输出和调试,可以使用:

$this->info('Your message to inform');
$this->error('Your error message');