【问题标题】:Target [App\Repositories\Setting\SettingRepositoryContract] is not instantiable while building [App\Http\Controllers\SettingsController]目标 [App\Repositories\Setting\SettingRepositoryContract] 在构建 [App\Http\Controllers\SettingsController] 时不可实例化
【发布时间】:2020-01-01 05:52:38
【问题描述】:

如何解决目标 [App\Repositories\Setting\SettingRepositoryContract] 在构建 [App\Http\Controllers\SettingsController] 时不可实例化的问题。

这是我的控制器

namespace App\Http\Controllers;
use Auth;
use Session;
use App\Http\Requests;
use Illuminate\Http\Request;
use App\Repositories\Setting\SettingRepositoryContract;
class SettingsController extends Controller
{
protected $settings;
public function __construct(
        SettingRepositoryContract $settings
    )
    {
        $this->settings = $settings;

    }

SettingRepositoryContract

namespace App\Repositories\Setting;

interface SettingRepositoryContract
{
    public function getCompanyName();

    public function updateOverall($requestData);

    public function getSetting();
}

注意:我是 laravel 的新手,无法理解这个错误。所以如果有人知道答案,请帮助我。

谢谢

【问题讨论】:

    标签: laravel-5 controller


    【解决方案1】:

    你需要以正确的方式去做:

    SettingsRepositoryInterface

    namespace App\Repositories;
    
    interface SettingsRepositoryInterface
    {
        public function getCompanyName();
    
        public function updateOverall($requestData);
    
        public function getSetting();
    }
    

    实现接口SettingsRepository

    namespace App\Repositories;
    
    use App\Repositories\SettingsRepositoryInterface;
    
    class SettingsRepository implements SettingsRepositoryInterface
    {
        public function getCompanyName()
        {
            // your code here
        }
    
        // all other functions here
    }
    

    创建一个新的服务提供者 SettingsRepositoryServiceProvider

    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    
    class SettingsRepositoryServiceProvider extends ServiceProvider
    {
        public function register()
        {
            $this->app->bind(
            'App\Repositories\SettingsRepositoryInterface',
            'App\Repositories\SettingsRepository');
        }
    }
    

    注册您的服务提供商,将其添加到config/app.php

    App\Providers\SettingsRepositoryServiceProvider::class,

    最后在你的控制器中

    namespace App\Http\Controllers;
    
    use Auth;
    use Session;
    use App\Http\Requests;
    use Illuminate\Http\Request;
    use App\Repositories\SettingsRepositoryInterface;
    
    class SettingsController extends Controller
    {
        protected $settings;
    
        public function __construct(SettingsRepositoryInterface $settings)
        {
            $this->settings = $settings;
        }
     }
    

    供您参考:

    https://laravel.com/docs/6.x/container & https://laravel.com/docs/6.x/providers

    根据需要修改命名空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-05
      • 2018-01-25
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多