我正在使用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]
拜托,有人帮我解决这个问题。谢谢
答案 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
]
所以它可以帮助别人。谢谢