2016-03-01 102 views
0

我得到我的laravel應用這個錯誤,我無法找到一個解決ErrorException傳遞給控制器​​控制器參數2 :: __結構()

ErrorException in FactoryController.php line 39: 
Argument 2 passed to Vanguard\Http\Controllers\FactoryController::__construct() 
must implement interface Vanguard\Repositories\Factory\FactoryRepository, 
instance of Vanguard\Repositories\Country\EloquentCountry given 

這些都是它指向的線條。

//Line 39 is below 
public function __construct(CountryRepository $countries, FactoryRepository $factories, RoleRepository $roles, PermissionRepository $permissions) 
{ 
    $this->middleware('permission:system.manage'); 
    $this->roles = $roles; 
    $this->permissions = $permissions; 
    $this->countries = $countries; 
    $this->factories = $factories; 

} 

這是FactoriesRepositories

<?php 

namespace Vanguard\Repositories\Factory; 

interface FactoryRepository 
{ 
    /** 
    * Get all system factorys. 
    * 
    * @return mixed 
    */ 
    public function all(); 

    /** 
    * Finds the factory by given id. 
    * 
    * @param $id 
    * @return mixed 
    */ 
    public function find($id); 

    /** 
    * Creates new factory from provided data. 
    * 
    * @param array $data 
    * @return mixed 
    */ 
    public function create(array $data); 

    /** 
    * Updates specified factory. 
    * 
    * @param $id 
    * @param array $data 
    * @return mixed 
    */ 
    public function update($id, array $data); 

    /** 
    * Remove specified factory from repository. 
    * 
    * @param $id 
    * @return mixed 
    */ 
    public function delete($id); 
} 

的代碼,這是EloquentFactory

<?php 

namespace Vanguard\Repositories\Factory; 



use Cache; 
use Vanguard\Events\Factory\Created; 
use Vanguard\Events\Factory\Deleted; 
use Vanguard\Events\Permission\Updated; 
use Vanguard\Factories; 

class EloquentFactory implements FactoryRepository 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function all() 
    { 
     return Factories::all(); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function find($id) 
    { 
     return Factories::find($id); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function create(array $data) 
    { 
     $factory = Factories::create($data); 

     event(new Created($factory)); 

     return $factory; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function update($id, array $data) 
    { 
     $factory = $this->find($id); 

     $factory->update($data); 

     Cache::flush(); 

     event(new Updated($factory)); 

     return $factory; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function delete($id) 
    { 
     $factory = $this->find($id); 

     event(new Deleted($factory)); 

     $status = $factory->delete(); 

     Cache::flush(); 

     return $status; 
    } 
} 

回答

0

從給定的錯誤,我們知道,Vanguard\Repositories\Country\EloquentCountry沒有實現Vanguard\Repositories\Factory\FactoryRepository接口。

可能的解決方法是,以確保該EloquentCountry類通過擴展底座EloquentFactory類或通過顯式實現FactoryRepository接口實現FactoryRepository接口。

EloquentCountry應該是這個樣子:

<?php 

namespace Vanguard\Repositories\Country; 

use Vanguard\Repositories\Factory\EloquentFactory; 

class EloquentCountry extends EloquentFactory 
{ 
    ... 
} 

而且我相信你讓Laravel自行解決FactoryController依賴。所以,既然你是類型暗示在構造函數中FactoryRepository接口和期待EloquentCountry實現,你需要在容器內綁定它像這樣:

App::bind('Vanguard\Repositories\Factory\FactoryRepository', 'Vanguard\Repositories\Country\EloquentCountry'); 
+0

爲什麼要'先鋒\庫\國家\ EloquentCountry'實行 '先鋒\庫\廠\ FactoryRepository' – dmSherazi

+0

因爲在'FactoryController'構造函數的第二個參數,您所期待的'$ factories'實現了'FactoryRepository'接口。 –

0

註冊方法添加到$this->app->singleton(FactoryRepository::class, EloquentFactory::class); 解決App\providers\AppServiceProvider.php的問題。

下面的錯誤是我的錯

must implement interface Vanguard\Repositories\Factory\FactoryRepository, 
instance of Vanguard\Repositories\Country\EloquentCountry given 

因爲我有誤添加$this->app->singleton(FactoryRepository::class, EloquentCountry ::class);