Я сравнивал свой код на этот вопрос и многие другие руководства онлайн, но с небольшим успехом. Все работает нормально, пока я не попытаюсь ввести интерфейс в моем контроллере. Когда я делаю инъекцию, я получаю Target Interface — не инстанцируемая ошибка.
Приложение \ модели \ Interfaces \ 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, и они выполняются успешно.
Есть идеи? Я очень ценю это.
Вам необходимо привязать интерфейс к классу, чтобы разрешить его из IOC:
В файле rout.php, предполагая, что это не пространство имен:
App::bind('app\modesl\Interfaces\InterviewInterface', 'Interview');
Других решений пока нет …