2014-07-21 28 views
0

我正在向Laravel庫添加自定義類,並且似乎非常接近成功。繼承人什麼我迄今所做的,然後我得到的錯誤:在Laravel 4中處理自定義類中的類依賴的正確方法

我的類被稱爲連接器和位於阿克米/原料藥/ Zurmo /連接器

這個類需要另一個類,所以這是該代碼:

use Acme\Api\Rest\ApiRestHelper; 

class Connector implements ConnectorInterface { 

    protected $rest; 

    public function __construct(ApiRestHelper $rest) 
    { 
     $this->rest = $rest; 
    } 

和我ApiRestHelper類開始是這樣的:

namespace Acme\Api\Rest; 

class ApiRestHelper { 

然後我剛加入routes.php文件快速封閉測試工作的,(這事實並非如此):

Route::get('/', function() 
{ 
    $connector = new Acme\Api\Zurmo\Connector; 
    var_dump($connector); 
}); 

這是錯誤我得到:

Argument 1 passed to Acme\Api\Zurmo\Connector::__construct() must be an instance of Acme\Api\Rest\ApiRestHelper, none given

我首先假設我已經擰我的命名空間,文件命名,但Laravel可以找到類,因爲我可以做以下沒有錯誤:

$rest = new Acme\Api\Rest\ApiRestHelper; 
var_dump($rest); 

任何想法我在這裏失蹤?謝謝。

+1

很確定Laravel有一個自動加載器 – Steve

+0

我想我幾乎在那裏,但是它很難在這個評論中展示,所以我想我會提出一個新問題。 –

+1

您隨時可以編輯您現有的問題 – Steve

回答

0

構造函數需要您在resthelper的一個實例傳遞:

//manual dependency injection 
Route::get('/', function() 
{ 
    $connector = new Acme\Api\Zurmo\Connector(new Acme\Api\Rest\ApiRestHelper); 
    var_dump($connector); 
}); 

或變更構造

//creates a hard dependency 
use Acme\Api\Rest\ApiRestHelper; 

class Connector implements ConnectorInterface { 

    protected $rest; 

    public function __construct() 
    { 
     $this->rest = new ApiRestHelper(); 
    } 
} 

更先進的辦法是使用依賴注入IOC容器,但那超出了這個答案的範圍

http://laravel.com/docs/ioc

相關問題