2016-03-01 99 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);