Laravel Structure - 依赖注入控制器

时间:2017-04-27 11:06:28

标签: php methods laravel-5 dependency-injection structure

我有一个laravel应用程序并创建了一个SocialMediaController来获取来自twitter和Instagram的最新帖子并将它们存储在数据库中。

我需要它们是普遍可访问的,并且知道我可以通过IOC访问它。

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

    }

然而,如果注入这样的控制器感觉不对。将这些方法用于全球使用的最佳方法是什么?

1 个答案:

答案 0 :(得分: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();
        ...
    }
}