2015-01-09 4 views
1

Я сравнивал свой код to this question и многие другие руководства в Интернете, но с небольшим успехом. Все работает нормально, пока я не попытаюсь ввести интерфейс в контроллер. Когда я ввожу его, я получаю интерфейс Target, это не реальная ошибка.Laravel 4: 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; 

линии, это дает мне ошибку. Я вытаскиваю их, никаких ошибок.

Несколько раз я запускал команды dump-autoload и php artisan dump-autoload, и они преуспели.

Любые идеи? Я очень ценю это.

ответ

2

Вы должны связать интерфейс к классу для того, чтобы решить ее с МОК:

В routes.php, предполагая, что это не в пространстве имен:

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

Все это время я смотрел на другой вопрос о том, что второй аргумент был для чего-то другого. О чем я думал в мире? Большое спасибо, @ Laravelian. Должен ли App :: bind действительно оставаться на моих маршрутах.php? – Christophe

+0

@christf вы можете использовать поставщика услуг, если хотите избежать размещения App :: bind в своих маршрутах.php –

Смежные вопросы