【问题标题】:Laravel 5.1 contract class does not existLaravel 5.1 合约类不存在
【发布时间】:2016-03-09 13:24:30
【问题描述】:

我正在尝试使用 Laravel 数据库合约而不是外观 (DB::table) 并获得:

ReflectionException

Class Illuminate\Contracts\Database does not exist 

使用Illuminate\Database\DatabaseManager 类可以正常工作,但除了依赖注入之外,我更愿意不使用具体类,而是使用抽象类(合同/接口)。

这是我尝试过的。

控制器:

<?php namespace App\Http\Controllers;

use Illuminate\Contracts\Database as DB;

class MyController extends Controller
{

    public function __construct(DB $db)
    {
        $this->db = $db;
    }

}

AppServiceProvider:

public function register()
    {
        $this->app->bind(
            'Illuminate\Contracts\Auth\Registrar',
            'App\Services\Registrar',
            'Illuminate\Contracts\Database'
        );
    }

任何帮助表示赞赏!

【问题讨论】:

  • 您可以添加另一个外观,但 __construct(您的控制器上的 DB 确实是个坏主意。我想知道您为什么决定使用 Illuminate\Contracts\Database ?
  • Illuminate\Contracts\Database 在 laravel 合约中不可用
  • 在此处查看可用合同列表:laravel.com/docs/5.1/contracts

标签: php laravel interface laravel-5.1


【解决方案1】:

除非您自己添加,否则该合同不存在。 Illuminate\Contracts\Redis\Database 存在,但不是您要使用的。

至于解决方案,我通常会注入 Illuminate\Database\DatabaseManager 类,我相信这就是您想要获得的类。该类实现了Illuminate\Database\ConnectionResolverInterface 接口。

【讨论】:

  • 感谢您指出 Illuminate\Database\DatabaseManager 确实实现了一个接口!这就是我想要的。
猜你喜欢
  • 2016-02-24
  • 2015-09-29
  • 2016-02-28
  • 1970-01-01
  • 2018-05-27
  • 2015-09-22
  • 2014-03-05
  • 1970-01-01
  • 2016-05-28
相关资源
最近更新 更多