我在我的控制器中使用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不存在
答案 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;
}
您是否也为界面创建了绑定?