Laravel 5 命令和处理程序问题
Laravel 5 Command and Handler issue
我正在与 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]
拜托,任何人都可以帮助我解决这个问题。谢谢
默认情况下 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()
{
//
}
}
config/app.php
'providers' => [
App\Providers\BusServiceProvider::class
]
所以它可能会对其他人有所帮助。谢谢
我正在与 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]
拜托,任何人都可以帮助我解决这个问题。谢谢
默认情况下 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()
{
//
}
}
config/app.php
'providers' => [
App\Providers\BusServiceProvider::class
]
所以它可能会对其他人有所帮助。谢谢