2015-03-09 5 views
2

Я совершенно новый в Laravel 5, что я пытаюсь сделать, это простой репозиторий с инъекцией зависимости. Но я застрял с этой ошибкой:Laravel 5 in situ

Argument 1 passed to App\Http\Controllers\Api\UserController::__construct() must implement interface App\Repositories\UserInterface, instance of App\Repositories\UserRepository given

Вот мой код:

UserController:

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'); 
     } 

пользовательским интерфейсом:

namespace App\Repositories; 

    use App\Repositories\BaseInterface; 

    interface UserInterface extends BaseInterface 
    { 
    }; 

Ba seInterface:

namespace App\Repositories; 

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

BaseRepository

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

namespace App\Repositories; 

    use App\Repositories\BaseRepository; 

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

RepositoryServiceProvider

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 добавляется в сервис-провайдеров в моем конфиге/app.php

Пожалуйста, помогите, я почти уверен, что я попробовал все, что я нашел в Google.

ответ

1

Ваш UserRepository должен реализовать UserInterface:

namespace App\Repositories; 

use App\Repositories\BaseRepository; 

class UserRepository extends BaseRepository implements UserInterface 
//           ^^^^^^^^^^^^^^^^^^^^^^^^ 
{ 
    protected $model = 'App\User'; 
} 
+0

большое спасибо :-) – Gmatkowski

Смежные вопросы