Laravel 4:目标接口不可实例化

时间:2015-01-09 17:29:06

标签: php laravel laravel-4 namespaces ioc-container

我一直在网上比较我的代码to this question和许多其他指南,但收效甚微。一切正常,直到我尝试在控制器中注入接口。当我注入它时,我得到的目标接口不是可实例化的错误。

应用\模型\接口\ InterviewInterface.php

<?php namespace app\models\Interfaces;

interface InterviewInterface {
    public function fetch($id);
}

应用\模型\ Interview.php

use app\models\Interfaces\InterviewInterface;

class Interview extends Eloquent implements InterviewInterface  {

    public function fetch($id)
    {
        return Interview::find($id);
    }

}

routes.php文件

App::bind('app\models\Interfaces\InterviewInterface');

composer.json

"psr-4": {
        "Blog\\Articles\\" : "app/lib/Blog/Articles",
        "app\\models\\Interfaces\\" : "app/models/Interfaces/InterviewInterface.php"
    }

AdminInterviewController.php

use app\models\Interfaces\InterviewInterface as InterviewInterface;

class AdminInterviewController extends BaseController  {

    public function __construct(InterviewInterface $interview)
    {
         $this->interview = $interview;
         $this->beforeFilter('auth');
    }

}

我一添加

use app\models\Interfaces\InterviewInterface as InterviewInterface;

__construct(InterviewInterface $interview)
$this->interview = $interview;

行,它给了我错误。我把它们拉出来,没有错误。

我已经多次运行php composer.phar dump-autoload和php artisan dump-autoload命令,并且它们成功了。

有什么想法吗?我真的很感激。

1 个答案:

答案 0 :(得分:2)

您需要将接口绑定到类,以便从IOC解析它:

在routes.php中,假设它不是命名空间:

App::bind('app\modesl\Interfaces\InterviewInterface', 'Interview');