Laravel 5命令和处理程序问题

时间:2015-07-03 13:53:30

标签: laravel command

我正在使用laravel 5处理我的一个项目。在实现过程中,我遇到了一个与命令和处理程序有关的问题。

我使用artisan命令生成命令

php artisan make:command TestCommand --handler

我在app / commands文件夹“TestCommand.php”中生成了命令

<?php

namespace App\Commands;

use App\Commands\Command;

class TestCommand extends Command
{
public $id;
public $name;

public function __construct($id, $name)
{
    $this->id = $id;
    $this->name = $name;
}
}

我的TestCommandHandler.php也是这样的

<?php

namespace App\Handlers\Commands;

use App\Commands\TestCommand;
use Illuminate\Queue\InteractsWithQueue;

class TestCommandHandler
{
/**
 * Create the command handler.
 *
 * @return void
 */
public function __construct()
{
    //
}

/**
 * Handle the command.
 *
 * @param  TestCommand  $command
 * @return void
 */
public function handle(TestCommand $command)
{
    dd($command);
}
}

每当从控制器发出此命令时,它都会显示以下问题

InvalidArgumentException in Dispatcher.php line 335:
No handler registered for command [App\Commands\TestCommand]

拜托,有人帮我解决这个问题。谢谢

1 个答案:

答案 0 :(得分:3)

默认情况下,Laravel 5.1.x不包含BusServiceProvider。所以我们应该在provider文件夹下创建BusServiceProvider.php并将其包含在config / app.php中。

BusServiceProvider.php

<?php namespace App\Providers;

use Illuminate\Bus\Dispatcher;
use Illuminate\Support\ServiceProvider;

class BusServiceProvider extends ServiceProvider {

/**
 * Bootstrap any application services.
 *
 * @param  \Illuminate\Bus\Dispatcher  $dispatcher
 * @return void
 */
public function boot(Dispatcher $dispatcher)
{
    $dispatcher->mapUsing(function($command)
    {
        return Dispatcher::simpleMapping(
            $command, 'App\Commands', 'App\Handlers\Commands'
        );
    });
}

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    //
}

}

配置/ app.php

'providers' => [
    App\Providers\BusServiceProvider::class
]

所以它可以帮助别人。谢谢