Laravel5 container & service provider
来源:互联网 发布:北京软件大学 编辑:程序博客网 时间:2024/06/05 23:00
前言
在看本篇博文之前,你应该对Laravel5有了初步的了解。
例如如何定义路由与相应的控制器,如何使用Model操作数据库,如何渲染视图。
掌握了以上技能,就已经可以顺畅的使用Laravel进行web开发了。
对于想深入了解Laravel的伙伴们,接下来就应该了解Laravel的container和service 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
- Laravel5 container & service provider
- laravel5如何创建service provider和facade
- laravel5如何创建service provider和facade
- laravel 服务容器service container和服务提供者service provider
- 解释清楚Laravel的Service Container, Service Provider,Contracts和Facade之间的关系
- Service Provider
- Service Provider
- winsock service provider editor
- Configuration Service Provider
- Layered Service Provider (LSP)
- Activity-Service-Receiver-Provider
- Service provider framework随记
- service provider framework (2)
- jdk service provider interface
- SPI-Service Provider Interface
- laravel Service Provider
- SPI (Service Provider Interface)
- Angular Provider Factory Service
- Python解析Json
- CentOS6.5安装Apache服务
- (2750)ZOJ
- fstream的使用方法介绍
- build_native.py文件分析(1)
- Laravel5 container & service provider
- mysql数据库实际上没有,还去访问
- 仿照网易新闻旧版本左拉的列表动画效果
- 第34课时,实践1,分数的累加
- xcode git(2)简单示例
- 【C语言】球从100米自由落下,每次落地后反跳回原高度的一半。当10次落地时,共经过多少米,第10次反弹多高。
- 设计模式
- 设计模式之单例模式(Singleton Pattern)C++实现
- n皇后问题 NOJ 1319