Laravel5 container & service provider

前言

在看本篇博文之前,你应该对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



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值