我有下面的合同/接口,它由服务提供商绑定,但我得到下面的错误:
RouteDependencyResolverTrait.php第81行中的ReflectionException:类App''Http''Controllers''RocketShipContract不存在
我做错了什么?
合同
namespace App'Contracts'Helpers;
Interface RocketShipContract
{
public function blastOff();
}
混凝土等级
namespace app'Contracts;
use App'Contracts'Helpers'RocketShipContract;
class RocketShip implements RocketShipContract
{
public function blastOff()
{
return 'Houston, we have ignition';
}
}
服务提供商
namespace App'Providers;
use Illuminate'Support'ServiceProvider;
use App'Contracts'RocketShip;
class RocketShipServiceProvider extends ServiceProvider
{
protected $defer = true;
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('App'Contracts'Helpers'RocketShipContract', function($app){
return new App'Contracts'RocketShip($app['HttpClient']);
});
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return ['App'Contracts'Helpers'RocketShipContract'];
}
}
控制器
public function test(RocketShipContract $rocketship)
{
$boom = $rocketship->blastOff();
return view('test.index', compact('boom'));
}
您得到的错误提示了问题:该类正在App'Http'Controllers
命名空间中解析。这是因为您需要在控制器中指定接口的完整名称空间。
因此,要么将其包含在use
语句中:
use App'Contracts'Helpers'RocketShipContract;
或者键入提示完整名称空间:
public function test(App'Contracts'Helpers'RocketShipContract $rocketship)
{
// ...
}