首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5存储库注入

Laravel 5存储库注入
EN

Stack Overflow用户
提问于 2015-03-09 09:18:54
回答 1查看 3.1K关注 0票数 2

我在Laravel 5中很新,我想要做的是一个简单的库,里面有依赖注入。但我被这个错误困住了:

传递给App\Http\Controllers\Api\UserController::__construct()的参数1必须实现应用程序\存储库\用户接口的接口,以及给定的App\存储库的实例

这是我的代码:

UserController:

代码语言:javascript
复制
namespace App\Http\Controllers\Api;

    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use Response;
    use App;
    use Auth;
    use Crypt;
    use Lang;
    use Image;
    use Storage;
    use Config;
    use Validator;
    use App\User;

    use App\Repositories\UserInterface;

    class UserController extends Controller
    {

        protected $config;
        protected $users;

        public function __construct(UserInterface $users)
        {
            $this->middleware('api');
            $this->middleware('auth', ['except' => 'getInfo']);

            $this->users = $users;

            $this->config = Config::get('images.avatar');
        }

UserInterface:

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

    use App\Repositories\BaseInterface;

    interface UserInterface extends BaseInterface
    {
    };

BaseInterface:

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

    interface BaseInterface
    {
        public function all();
        public function paginate($count);
        public function find($id);
    }

BaseRepository

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

    use App\Repositories\BaseInterface;

    class BaseRepository implements BaseInterface
    {

        protected $model;

        public function __call($name, $args)
        {
            //  $this->getNewInstance()->{$name($args)};
            return call_user_func_array([
            $this->getNewInstance(),
            $method], $args);
        }

        public function all($relations = [])
        {
            $instance = $this->getNewInstance();
            return $instance->with($relations)->all();
        }

        public function find($id, $relations = [])
        {
            $instance = $this->getNewInstance();
            return $instance->with($relations)->find($id);
        }

        public function findOrFail($id, $relations = [])
        {
            $instance = $this->getNewInstance();
            return $instance->with($relations)->findOrFail($id);
        }

        public function paginate($count)
        {

        }

        protected function getNewInstance()
        {
            return new $this->model;
        }

    }

UserRepository

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

    use App\Repositories\BaseRepository;

    Class UserRepository extends BaseRepository
    {
        protected $model = 'App\User';
    }

RepositoryServiceProvider

代码语言:javascript
复制
namespace App\Providers;

    use Illuminate\Support\ServiceProvider;
    use App;

    class RepositoryServiceProvider extends ServiceProvider
    {

        /**
         * Register any error handlers.
         *
         * @return void
         */
        public function boot()
        {

        }

        /**
         * Register the service provider.
         *
         * @return void
         */
        public function register()
        {
            //
            App::bind('App\Repositories\UserInterface', 'App\Repositories\UserRepository');
        }

    }

当然,RepositoryServiceProvider是在我的config/app.php中的服务提供者下面添加的。

请帮帮忙,我几乎可以肯定,我已经尝试了所有我在谷歌找到的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-09 09:21:32

您的UserRepository必须实现UserInterface

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

use App\Repositories\BaseRepository;

class UserRepository extends BaseRepository implements UserInterface
//                                          ^^^^^^^^^^^^^^^^^^^^^^^^
{
    protected $model = 'App\User';
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28938494

复制
相关文章

相似问题

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