Laravel5 container & service provider

来源:互联网 发布:北京软件大学 编辑:程序博客网 时间:2024/06/05 23:00

前言

在看本篇博文之前,你应该对Laravel5有了初步的了解。

例如如何定义路由与相应的控制器,如何使用Model操作数据库,如何渲染视图。

掌握了以上技能,就已经可以顺畅的使用Laravel进行web开发了。

对于想深入了解Laravel的伙伴们,接下来就应该了解Laravel的containerservice provider

城堡、管家和奴隶

从前有一个城堡,这个城堡有个大管家,他管着一个干活的奴隶。

场景1.
城堡经营的不错,客人越来越多,大管家觉得城堡里应该有一种交通工具,方便大家出行。于是他去买了一匹马,交给了奴隶,并对奴隶说:
以后有客人需要交通工具的,就把这匹马交给他。

场景2.

城堡经营的越来越好,管家手里的钱多了,觉得马太慢了,骑着很不舒服。他又一次对奴隶说,下次有客人需要交通工具时,你去东方路上的奔驰4s店里,买一辆奔驰c级回来,交给客人。

场景3.

有一天,城堡里要接待一位外国政要,奔驰车级别不够了,得买劳斯莱斯,管家对奴隶说:如果这位政要需要出行,你就去买一辆劳斯莱斯回来,但是,不管他要求多少次,你都只能用那一辆,不能再买第二辆了(车太贵)。

这里的城堡对应的就是container,管家就是service provider,马、奔驰车、劳斯莱斯是service。

场景1、2、3分别对应service provider向container绑定服务的三种方式。下面会讲到细节。

初识Container & Service provider

container的最大作用在于解决依赖关系。

在public/index.php这个入口文件里可以看到这样一行代码。

$app = require_once __DIR__.'/../bootstrap/app.php';

bootstrap/app.php有一段代码

$app = new Illuminate\Foundation\Application(realpath(__DIR__.'/../'));

上面这段代码就生成了我们这里提到的container。

框架里的一切活动都是在这个container里进行的。


当你在控制器里用变量类型指定传入的参数为Request类时,Laravel会“自动”帮你生成一个Request类的示例,之后你就可以调用Request类的方法来获取http请求的输入了。这看起来有些“神秘”。

其实,这个Request类就是一种服务(Service)。而Service provider负责向container“提供”服务(Service)。


在config/app.php文件里可以看到框架运行时加载的所有Service providers

'providers' => [/* * Laravel Framework Service Providers... */'Illuminate\Foundation\Providers\ArtisanServiceProvider','Illuminate\Auth\AuthServiceProvider','Illuminate\Bus\BusServiceProvider','Illuminate\Cache\CacheServiceProvider','Illuminate\Foundation\Providers\ConsoleSupportServiceProvider','Illuminate\Routing\ControllerServiceProvider','Illuminate\Cookie\CookieServiceProvider','Illuminate\Database\DatabaseServiceProvider','Illuminate\Encryption\EncryptionServiceProvider','Illuminate\Filesystem\FilesystemServiceProvider','Illuminate\Foundation\Providers\FoundationServiceProvider','Illuminate\Hashing\HashServiceProvider','Illuminate\Mail\MailServiceProvider','Illuminate\Pagination\PaginationServiceProvider','Illuminate\Pipeline\PipelineServiceProvider','Illuminate\Queue\QueueServiceProvider','Illuminate\Redis\RedisServiceProvider','Illuminate\Auth\Passwords\PasswordResetServiceProvider','Illuminate\Session\SessionServiceProvider','Illuminate\Translation\TranslationServiceProvider','Illuminate\Validation\ValidationServiceProvider','Illuminate\View\ViewServiceProvider',/* * Application Service Providers... */'App\Providers\AppServiceProvider','App\Providers\BusServiceProvider','App\Providers\ConfigServiceProvider','App\Providers\EventServiceProvider','App\Providers\RouteServiceProvider',],

深入了解Service Provider



0 0
原创粉丝点击