2015-04-02 39 views
3

已經詢問過這個主題的多個問題,但我仍然有這個問題,我不知道問題是什麼。Laravel 5的目標是不可實例化的

我想實現我可以實例化一個接口而不是實現。

我使用Laravel 5,這是代碼/結構:

在應用程序,我已經創建了一個合同文件夾。在此文件夾我有Messenger.php:

Messenger.php

<?php namespace App\Contracts; 

interface Messenger { 

    public function goodmorning($name); 

} 

在應用程序/服務我有 DailyMessenger.php

<?php namespace App\Services; 

use App\Contracts\Messenger; 

class DailyMessenger implements Messenger { 

    public function goodmorning($name) 
    { 
     return 'Goodmorning '. $name; 
    } 

} 

現在我想實例化我的接口控制器

現在
public function __construct(Messenger $messenger) 
    { 
     $this->messenger = $messenger; 
    } 

,如果我按照Laravel網站上的文檔,我應該只在服務容器,這是我在現有的AppServiceProvider.php

public function register() 
    { 
     $this->app->bind(
      'Illuminate\Contracts\Auth\Registrar', 
      'App\Services\Registrar' 
     ); 

     $this->app->bind('App\Contacts\Messenger', 'App\Services\DailyMessenger'); 
    } 

辦?如果我訪問相應的登記本映射到控制器的路線我得到的錯誤:

BindingResolutionException in Container.php line 785: 
Target [App\Contracts\Messenger] is not instantiable. 

我想我已經嚴格遵循了Laravel文檔,但我缺少什麼?在此先感謝:-)

回答

3

看起來像拼寫命名空間時綁定,錯誤使用應用程序\聯繫人而不是應用程序\合同。應該是:

$this->app->bind('App\Contracts\Messenger', 'App\Services\DailyMessenger'); 
相關問題