这篇文章将为大家详细讲解有关Laravel框架中依赖注入功能的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概述任何时候,你在一个控制器类中请求一个依赖,这个服务容器负责:自动地在构造函数中检测依
这篇文章将为大家详细讲解有关Laravel框架中依赖注入功能的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
任何时候,你在一个控制器类中请求一个依赖,这个服务容器负责:
自动地在构造函数中检测依赖关系
如果需要构建这个依赖关系
通过构造函数创建对象形成依赖关系
来看一个非常简单的例子。
<?PHPnamespace App\Http\Controllers;use App\User;use App\Repositories\UserRepository;use App\Http\Controllers\Controller;class UserController extends Controller{ protected $userRepository; public function __construct(UserRepository $userRepository) { $this->userRepository = $userRepository; } public function show($id) { $user = $this->userRepository->find($id); return view('user.profile', ['user' => $user]); }}
假如,你有一个UserController类需要UserRepository作为一个构造函数依赖。
服务容器使用php的反射类来检测,事实UserRepository需要被优先解析。
然后,它构造UserRepository实例。
然后,它构造UserController类实例。
依赖关系是如何被解析和注入的,我被很多Laravel开发人员不知道这个简单而强大的技术感到迷惑。 这是一个非常强大的技术,它可以被用来解决复杂对象的依赖关系。
如果由于某种原因,您不希望Laravel自动构建一个对象,您还可以通过传递一个可用于创建依赖关系的回调来告诉Laravel Service Container如何构造该对象。
<?php$container->bind('My\Service', function($container) {return new My\Service($container->make('My\AnotherService'));});
您需要创建一个服务提供商来注册上述服务。
<?phpnamespace App\Providers;use Illuminate\Support\ServiceProvider;class MyServiceProvider extends ServiceProvider{ public function reGISter() { $this->app->singleton(\My\Service::class, function ($app) { return new \My\Service($app->make('My\AnotherService')); }); }}
当My\Service需要被解析的时候,负责返回一个对象的回调函数就会被调用。
<?phpnamespace App\Http\Controllers;use App\User;use App\Http\Controllers\Controller;class MyController extends Controller{ protected $myService; public function __construct(\My\Service $myService) { $this->myService = $myService; } // .. 方法}
假设你的应用需要Facebook的PHP SDK来访问Facebook的api,你的控制器就是这样的:
<?phpnamespace App\Http\Controllers;use App\User;use App\Http\Controllers\Controller;use Facebook\Facebook;class FacebookApiAccessController extends Controller{ protected $facebook; public function __construct(Facebook\Facebook $facebook) { $this->facebook = $facebook; } //.. action methods here}
现在,您需要告诉Service Container如何构建Facebook\Facebook的实例.
<?php$container->singleton('Facebook\Facebook', function() { return new \Facebook\Facebook([ 'app_id' => config('services.facebook.app_id'), 'app_secret' => config('services.facebook.app_secret'), 'default_graph_version' => 'v2.10', ]);});
注意,我已经调用了方法singleton而不是bind。 唯一的区别是用singleton注册的服务被缓存,随后的解析服务调用返回缓存的服务。
关于“Laravel框架中依赖注入功能的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
--结束END--
本文标题: Laravel框架中依赖注入功能的示例分析
本文链接: https://www.lsjlt.com/news/278272.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0