Laravel 4: 目标接口不可实例化
Laravel 4: Target Interface is not instantiable
我一直在比较我的代码 to this question 和许多其他在线指南,但收效甚微。一切正常,直到我尝试在我的控制器中注入接口。当我注入它时,出现目标接口不可实例化错误。
app\models\Interfaces\InterviewInterface.php
<?php namespace app\models\Interfaces;
interface InterviewInterface {
public function fetch($id);
}
app\models\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 命令,它们都成功了。
有什么想法吗?非常感谢。
您需要将接口绑定到 class 以便从 IOC 解析它:
在 routes.php 中,假设它没有命名空间:
App::bind('app\modesl\Interfaces\InterviewInterface', 'Interview');
我一直在比较我的代码 to this question 和许多其他在线指南,但收效甚微。一切正常,直到我尝试在我的控制器中注入接口。当我注入它时,出现目标接口不可实例化错误。
app\models\Interfaces\InterviewInterface.php
<?php namespace app\models\Interfaces;
interface InterviewInterface {
public function fetch($id);
}
app\models\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 命令,它们都成功了。
有什么想法吗?非常感谢。
您需要将接口绑定到 class 以便从 IOC 解析它:
在 routes.php 中,假设它没有命名空间:
App::bind('app\modesl\Interfaces\InterviewInterface', 'Interview');