我有一个laravel应用程序并创建了一个SocialMediaController来获取来自twitter和Instagram的最新帖子并将它们存储在数据库中。
我需要它们是普遍可访问的,并且知道我可以通过IOC访问它。
public function doSomething(App\Http\Controllers\SocialMediaController
$SocialMedia) {
}
然而,如果注入这样的控制器感觉不对。将这些方法用于全球使用的最佳方法是什么?
答案 0 :(得分:0)
您似乎希望与另一个控制器共享SocialMediaController
中的某些逻辑,对吗?
您可以将当前逻辑移动到服务,而不是尝试使用服务容器将控制器实例传递给控制器操作。请参阅Laravel文档中的Service Container和Service Providers,了解如何创建自己的服务。
实现这一目标的另一种方法是使用特征。请查看此答案,了解如何执行此操作https://stackoverflow.com/a/30365349/1128918。你最终会得到这样的东西:
trait SocialFeeder {
public function getLatestFromTwitter() {
...
}
}
然后,您可以在控制器中使用该新特性:
class SocialMediaController extends Controller {
use SocialFeeder;
public function doSomething() {
...
$tweets = $this->getLatestFromTwitter();
...
}
}