我一直在网上比较我的代码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命令,并且它们成功了。
有什么想法吗?我真的很感激。
答案 0 :(得分:2)
您需要将接口绑定到类,以便从IOC解析它:
在routes.php中,假设它不是命名空间:
App::bind('app\modesl\Interfaces\InterviewInterface', 'Interview');