【问题标题】:Laravel Structure - dependency injecting a controllerLaravel 结构 - 依赖注入控制器
【发布时间】:2017-04-27 11:06:28
【问题描述】:

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

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

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

    }

但是,如果感觉注入这样的控制器是错误的。将这些方法打包以供全球使用的最佳方式是什么?

【问题讨论】:

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


    【解决方案1】:

    您似乎想与另一个控制器共享您在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();
            ...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-13
      • 2018-05-17
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2018-04-16
      • 2018-10-21
      相关资源
      最近更新 更多