2016-08-22 56 views
1

工作在Laravel,我有我想提供給服務控制器,做一些修改,以在控制器動作,然後呈現出一個ViewComposer類。Laravel單不能跨控制器/ ViewComposer

我之前做過幾次這樣沒有​​問題,但由於某種原因,這次我通常的做法並不奏效 - 顯然我做了一些不同的事情,我開始懷疑我從根本上誤解了我在做什麼。

我有一個用的ServiceProvider該寄存器()方法:

public function register() 
{ 
    $this->app->singleton(HelperTest::class, function ($app) { 
     $pb = new HelperTest(); 

     $pb->test = "jokes on you batman"; 

     return $pb; 
    }); 
} 

然後在我的控制,我做了以下內容:

private $helper; 

public function __construct(HelperTest $pb) 
{ 
    $this->helper = $pb; 
    $this->helper->test = "hahah"; 
} 

然後,我有一個viewcomposer執行以下操作:

private $helper; 

public function __construct(HelperTest $pb) 
{ 
    $this->helper = $pb; 
} 

public function compose(View $view) 
{ 
    $view->with('output', $this->helper->test); 
} 

當我在刀片視圖中調用{{ $output }}時,我期望看到hahah,但是我得到jokes on you batman

我調試表明,所有這三種方法都肯定被調用。它在我看來像ViewComposer是由於某種原因實例化它自己的,新的類實例。我究竟做錯了什麼?

謝謝!

+0

我做更多的調試,看來,撰寫()被調用之前的控制器動作。爲什麼會這樣? – Raiden616

回答

0

您的控制檯上執行PHP工匠優化,這會爲你的應用程序優化的類加載器,然後檢查,如果你能找到的自舉/緩存中services.php註冊類HelperTest。直到HelperTest沒有在那裏註冊,Larvel IOC無法解決你的課程。