2015-04-07 42 views
1

我試圖找出爲什麼我收到此錯誤。我正在跟隨。然而,唯一的區別是在錄製時它是用Laravel 4.25完成的,而現在我正在使用Laravel 5.0。未被實例化的存儲庫

Repositories and Inheritance

BindingResolutionException在Container.php線785:

目標[應用\庫\用戶\ UserRepository]不是實例化。

<?php 
    namespace App\Http\Controllers; 

    use App\Http\Requests; 
    use App\Http\Controllers\Controller; 
    use App\Repositories\User\UserRepository; 

    use Illuminate\Http\Request; 

    class UsersController extends Controller { 

     private $userRepository; 

     public function __construct(UserRepository $userRepository) { 
      $this->userRepository = $userRepository; 
     } 

     /** 
     * Display a listing of the resource. 
     * 
     * @return Response 
     */ 
     public function index() { 
      $users = $this->userRepository->getAll(); 

      return $users; 
     } 
    } 

<?php 

    namespace App\Repositories\User; 

    use App\Repositories\EloquentRepository; 

    class EloquentUserRepository extends EloquentRepository implements UserRepository 
    { 
     private $model; 

     function __construct(User $model) { 
      $this->model = $model; 
     } 
    } 

<?php 

    namespace App\Repositories\User; 

    interface UserRepository { 
     public function getAll();  
    } 

<?php 

    namespace App\Repositories; 

    abstract class EloquentRepository { 

     public function getAll() { 
      return $this->model->all(); 
     } 

     public function getById() { 
      return $this->model->findOrFail($id); 
     } 
    } 

回答

2

你是暗示類型的接口,而不是類本身。發生此錯誤是因爲Laravel無法綁定接口,因爲綁定必須是可實例化的。除非Laravel知道具體的(可實例化的)類來替代抽象類/接口,否則抽象類或接口是無效的。

您需要綁定EloquentUserRepository到接口:

App::bind('UserRepository', 'EloquentUserRepository'); 
+0

是的東西只是Laravel 5,因爲觀看錄像課傑弗里路不會添加綁定到應用程序。 – user3732216

+0

這是真的嗎? – user3732216

+0

它看起來好像是在4.2中,文檔也是這樣指定的:http://laravel.com/docs/4.2/ioc#automatic-resolution。我一直專門做了綁定,因爲它提供了更清晰的特定接口使用哪個具體類。另外我經常切換課程進行測試。這裏是關於它的5.0文檔:http://laravel.com/docs/5.0/container#binding-interfaces-to-implementations – Scopey