2017-04-27 203 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(); 
     ... 
    } 
}