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

2024-02-02

我有以下由服务提供商绑定的合同/接口,但是我收到以下错误:

RouteDependencyResolverTrait.php 第 81 行中的 ReflectionException: 类 App\Http\Controllers\RocketShipContract 不存在

我究竟做错了什么 ?

Contract

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)
{
    // ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 服务提供商不受合同约束 的相关文章

随机推荐