Laravel服务提供商不受合同约束


Laravel service provider not binding to contract

我有下面的合同/接口,它由服务提供商绑定,但我得到下面的错误:

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)
{
    // ...
}