2017-04-27 252 views
1

我有一個laravel應用程序,並已創建SocialMediaController從Twitter和Instagram獲取最新帖子,並將它們存儲在數據庫中。Laravel結構 - 依賴注入控制器

我需要他們是普遍可及的,並且知道我可以通過IOC訪問它。

public function doSomething(App\Http\Controllers\SocialMediaController 
    $SocialMedia) { 

    } 

但是,如果感覺不對,像這樣注入控制器。什麼是最好的方法來結束這些方法的全球使用?

回答

0

看來你想與另一個控制器共享SocialMediaController中的一些邏輯,對吧?

不是試圖使用服務容器將控制器實例傳遞給控制器​​操作,而是將當前邏輯移至服務。請參閱Laravel文檔中的Service ContainerService Providers關於如何創建自己的服務的文檔。

另一種實現方法是使用特質。檢查這個答案你如何可以做到這一點https://stackoverflow.com/a/30365349/1128918。你最終會是這樣的:

trait SocialFeeder { 
    public function getLatestFromTwitter() { 
     ... 
    } 
} 

,然後,你可以使用新的特質與你的控制器:

class SocialMediaController extends Controller { 
    use SocialFeeder; 
    public function doSomething() { 
     ... 
     $tweets = $this->getLatestFromTwitter(); 
     ... 
    } 
}