首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类UserRepositoryInterface不存在

类UserRepositoryInterface不存在
EN

Stack Overflow用户
提问于 2014-05-09 11:54:47
回答 2查看 1.7K关注 0票数 1

我在我的控制器中使用UserRepositoryInterface,但是它找不到它。我用的是拉拉4号。我的控制器如下所示:

代码语言:javascript
复制
 class Insur_DocController extends \BaseController {

       /*
        * Constructor.
        *

        public function __construct(UserRepositoryInterface $userInstance) {
            $cars = DB::table('cars')->orderBy('Description', 'asc')->distinct()->lists('Description', 'id');
            $this->cars = $cars;
        }

它显示的错误是:

ReflectionException类UserRepositoryInterface不存在

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-09 12:00:07

接口不是类,也不可实例化,因此必须将存储库接口绑定到该接口的实现,假设您已经在routes.php中同时创建了这两个接口(或仅创建一个bindings.php),您可以:

代码语言:javascript
复制
App::bind('UserRepositoryInterface', 'DbUserRepository');

当然,您必须在使用它的类的顶端使用它:

代码语言:javascript
复制
use App\WhateverNamespaceYouHaveSetForYourRepositores\UserRepositoryInterface

如果您没有创建UserInterfaceRepository和DbUserRepository,那么创建它们。如果不想创建它们,只需使用user类实例化用户:

代码语言:javascript
复制
public function __construct(User $userInstance) {
    ...
}

编辑:

我就是这样使用我的存储库的:

我有一个存储库接口

代码语言:javascript
复制
<?php namespace App\Repositories\User;

interface RepositoryInterface {}

这是我的存储库的数据库实现:

代码语言:javascript
复制
<?php namespace App\Repositories\User;

use App\Repositories\BaseRepository;

use App\Repositories\User\RepositoryInterface as UserRepositoryInterface;

use App\Models\User\ModelInterface as UserModelInterface;

class DbRepository extends BaseRepository implements UserRepositoryInterface {

    public function __construct(UserModelInterface $model)
    {
        $this->model = $model;
    }

}

如您所见,我有一个BaseRepository抽象类,并实现了一些常见的方法。

代码语言:javascript
复制
<?php namespace App\Repositories;

abstract class BaseRepository {

    protected $model;

    public function find($id)
    {
        ...
    }

    public function create($data)
    {
        ...
    }

    public function all($columns = null)
    {
        ...
    }

}

我还有一个模型目录,其中包含一个用户,但是我的用户模型扩展了Cartalyst的Sentry,而不是直接雄辩:

代码语言:javascript
复制
<?php namespace App\Models\User;

use Cartalyst\Sentry\Users\Eloquent\User as SentryModel;

use App\Models\BaseTraits as BaseModelTraits;

class Model extends SentryModel {

    protected $table = 'users';

}

并具有约束力:

代码语言:javascript
复制
App::bind('App\Repositories\User\RepositoryInterface', 'App\Repositories\User\DbRepository')

这是我的目录结构

代码语言:javascript
复制
├── app
│   ├── App
│   │   ├── Models
│   │   │   ├── User
│   │   │   │   └── Model.php
│   │   ├── Repositories
│   │   │   ├── BaseRepository.php
│   │   │   ├── User
│   │   │   │   ├── RepositoryInterface.php
│   │   │   │   └── Repository.php
票数 2
EN

Stack Overflow用户

发布于 2014-05-09 11:59:58

UserRepositoryInterface的命名空间是什么?

例如,如果你有它的话。

Acme\存储库\UserRepositoryInterface

那么在你的控制器里你会这样做的。

代码语言:javascript
复制
<?php 

use Acme\Repositories\UserRepositoryInterface;

class Insur_DocController extends \BaseController {

       /*
        * Constructor.
        *

        public function __construct(UserRepositoryInterface $userInstance) {
            $cars = DB::table('cars')->orderBy('Description', 'asc')->distinct()->lists('Description', 'id');
            $this->cars = $cars;
        }

您还为接口创建了绑定吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23563990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档