错误__construct()必须是Interface的实例,没有给出

时间:2013-11-26 21:00:19

标签: php laravel

我正在为Laravel开发一个包,我收到一个错误,我无法弄清楚如何修复:

  

传递给Cartalini \ Drayman \ Drayman :: __ construct()的参数1必须是Cartalini \ Drayman \ Repositories \ UserRepositoryInterface的实例,没有给出,在/ Applications / MAMP / htdocs / l4 / app / controllers / HomeController中调用。 php在第10行并定义了

这是我的代码......

namespace Cartalini\Drayman;

use Cartalini\Drayman\Repositories\UserRepositoryInterface;

class Drayman
{
    protected $user;

    public function __construct(UserRepositoryInterface $user)
    {
        $this->user = $user;
    }

    public function deliverBeer()
    {
        return $this->user->all();
    }
}

... UserRepository

namespace Cartalini\Drayman\Repositories;

class UserRepository implements UserRepositoryInterface
{
    public function all()
    {
        return User::all();
    }
}

... UserRepositoryInterface

namespace Cartalini\Drayman\Repositories;

interface UserRepositoryInterface
{
    public function all();
}

服务提供商......

public function register()
{
    $this->app->bind('Cartalini\Drayman\Repositories\UserRepositoryInterface', 'Cartalini\Drayman\Repositories\UserRepository');
}

最后我的控制器......

use Cartalini\Drayman\Drayman as Drayman;

class HomeController extends BaseController 
{
    public function showWelcome()
    {
        $drayman = new Drayman;
        return $drayman->deliverBeer();
    }
}

有人可以帮我调试吗?

2 个答案:

答案 0 :(得分:2)

showWelcome函数中:

public function showWelcome()
{
    // need to pass a UserRepositoryInterface object here:
    $drayman = new Drayman;
    return $drayman->deliverBeer();
}

由于您未传递代码所需的UserRepositoryInterface对象,因此您会收到该错误。

答案 1 :(得分:0)

可能有点晚了,但我遇到了同样的问题,原因是我的具体类没有实现它对应的接口类。实施后,一切顺利。
尽管您正确地实现了它,但这个错误可能有几个原因,其中一个是我所描述的。