类UserRepositoryInterface不存在

时间:2014-05-09 11:54:48

标签: laravel laravel-4

我在我的控制器中使用UserRepositoryInterface,但它找不到它。我正在使用laravel 4.我的控制器如下所示:

 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不存在

2 个答案:

答案 0 :(得分:2)

接口不是类,并且不是可实例化的,因此您必须将该存储库接口绑定到该接口的实现,假设您已在routes.php中创建了它们(或者只是创建绑定)。 php),你可以:

App::bind('UserRepositoryInterface', 'DbUserRepository');

当然,你必须在使用它的类的顶部使用它:

use App\WhateverNamespaceYouHaveSetForYourRepositores\UserRepositoryInterface

如果您没有创建UserInterfaceRepository和DbUserRepository,请创建它们。如果您不想创建它们,可以使用User类实例化您的用户:

public function __construct(User $userInstance) {
    ...
}

修改

这就是我使用我的存储库的方式:

我有一个存储库界面

<?php namespace App\Repositories\User;

interface RepositoryInterface {}

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

<?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抽象类,并实现了一些常用方法。

<?php namespace App\Repositories;

abstract class BaseRepository {

    protected $model;

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

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

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

}

我还有一个带有User的Models目录,但是我的用户模型扩展了Cartalyst的Sentry而不是Eloquent:

<?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';

}

还有一个约束力:

App::bind('App\Repositories\User\RepositoryInterface', 'App\Repositories\User\DbRepository')

这是我的目录结构

├── app
│   ├── App
│   │   ├── Models
│   │   │   ├── User
│   │   │   │   └── Model.php
│   │   ├── Repositories
│   │   │   ├── BaseRepository.php
│   │   │   ├── User
│   │   │   │   ├── RepositoryInterface.php
│   │   │   │   └── Repository.php

答案 1 :(得分:0)

UserRepositoryInterface的命名空间是什么?

例如,如果你有。

的Acme \库\ UserRepositoryInterface

然后在你的控制器中你会做。

<?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;
        }

您是否也为界面创建了绑定?