我在我的控制器中使用UserRepositoryInterface,但是它找不到它。我用的是拉拉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不存在
发布于 2014-05-09 12:00:07
接口不是类,也不可实例化,因此必须将存储库接口绑定到该接口的实现,假设您已经在routes.php中同时创建了这两个接口(或仅创建一个bindings.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)
{
...
}
}我还有一个模型目录,其中包含一个用户,但是我的用户模型扩展了Cartalyst的Sentry,而不是直接雄辩:
<?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发布于 2014-05-09 11:59:58
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;
}您还为接口创建了绑定吗?
https://stackoverflow.com/questions/23563990
复制相似问题