laravel-服务提供者
2016-04-19 15:08
716 查看
本文转自:http://huifeng.me/2015/12/23/laravel-%E6%9C%8D%E5%8A%A1%E6%8F%90%E4%BE%9B%E8%80%85-%E6%88%91%E6%98%AF%E8%BF%99%E4%B9%88%E7%90%86%E8%A7%A3%E7%9A%84/
关于 laravel 的很多理解还是比较缺乏,最近看 laravel 学院的基础教程,这里把我的个人理解放这里,方便日后温故。
第一步定义服务类。也就是我们具体的逻辑方法等,定义这个类又应该有契约约束,所以定义接口并让服务类继承实现,所以第一步是包括服务类和接口的定义。
第二步定义服务提供者。服务有了,需要专人负责实时所提供的服务,实例化对象和绑定在这里完成。
第三步注册服务。公司装修好了,设备也都能运转了,可要是向所有人提供服务就需要获得政府的认可和注册,告诉政府公司地址,以便管控。
第四步开店营业。所有事务都以准备完毕,可以开张营业了,店面负责展示和向公司提交订单等业务逻辑(路由、控制器和视图)。
按照正常思维逻辑,我们需要实现某功能或服务,现在,我们创建服务类,考虑到创建服务类应该先创建其接口来约束该类,所以我们要先创建这个约束其行为的接口
然后我们来定义针对这个接口的实现,具体的服务逻辑
第一步是为了制造机器,机器制造好了,需要用好机器,服务提供者就是用机器的人,绑定和实例化应该是在这里完成。
定义一个服务提供者
成执行会在
服务提供者多了,系统难免难于管理,为了更有条理的管理好各类服务提供者,应该有政府出面来负责各类服务的注册,注册的意思就是说,只有在政府注册了的公司才可以合法经营。
laravel 所有的注册都是在
这里包括创建测试用控制器和视图,添加测试用路由等。
创建
控制器内容为:
在
此时,我们可以测试下:
“Call Me From TestServiceProvider In TestController”
此外,Laravel服务提供者还支持延迟加载,具体可参考服务提供者文档。
关于 laravel 的很多理解还是比较缺乏,最近看 laravel 学院的基础教程,这里把我的个人理解放这里,方便日后温故。
原理概括
第一步定义服务类。也就是我们具体的逻辑方法等,定义这个类又应该有契约约束,所以定义接口并让服务类继承实现,所以第一步是包括服务类和接口的定义。第二步定义服务提供者。服务有了,需要专人负责实时所提供的服务,实例化对象和绑定在这里完成。
第三步注册服务。公司装修好了,设备也都能运转了,可要是向所有人提供服务就需要获得政府的认可和注册,告诉政府公司地址,以便管控。
第四步开店营业。所有事务都以准备完毕,可以开张营业了,店面负责展示和向公司提交订单等业务逻辑(路由、控制器和视图)。
案例实现
1、定义服务类
按照正常思维逻辑,我们需要实现某功能或服务,现在,我们创建服务类,考虑到创建服务类应该先创建其接口来约束该类,所以我们要先创建这个约束其行为的接口app\TestContracts\TestContract.php:
<?php namespace App\Contracts; interface TestContract { public function callMe($controller); } |
app\Services\TestService.php:
<?php namespace App\Services; use App\Contracts\TestContract; class TestService implements TestContract { public function callMe($controller) { dd('Call Me From TestServiceProvider In '.$controller); } } |
2、创建服务提供者
第一步是为了制造机器,机器制造好了,需要用好机器,服务提供者就是用机器的人,绑定和实例化应该是在这里完成。定义一个服务提供者
TestServiceProvider,运行下面的命令:
php artisan make:provider TestServiceProvider |
app/Providers目录下生成一个
TestServiceProvider.php文件,我们修改其内容如下:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Services\TestService; class TestServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void * @author LaravelAcademy.org */ public function register() { //使用singleton绑定单例 $this->app->singleton('test',function(){ return new TestService(); }); //使用bind绑定实例到接口以便依赖注入 $this->app->bind('App\Contracts\TestContract',function(){ return new TestService(); }); } } |
register()方法里的这两种绑定方式是由区别的,可以参考服务容器文档了解更多。
3、注册服务提供者
服务提供者多了,系统难免难于管理,为了更有条理的管理好各类服务提供者,应该有政府出面来负责各类服务的注册,注册的意思就是说,只有在政府注册了的公司才可以合法经营。laravel 所有的注册都是在
config/app.php里。我们在
provider数组里追加我们新增加的服务:
// 更多 'providers' => [ //其他服务提供者 App\Providers\TestServiceProvider::class, ], // 更多 |
4、测试服务提供者
这里包括创建测试用控制器和视图,添加测试用路由等。
创建控制器
创建TestController控制器,运行:
php artisan make:controller TestController |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use App; use App\Contracts\TestContract; class TestController extends Controller { //依赖注入 public function __construct(TestContract $test){ $this->test = $test; } /** * Display a listing of the resource. * * @return Response * @author LaravelAcademy.org */ public function index() { // $test = App::make('test'); // $test->callMe('TestController'); $this->test->callMe('TestController'); } ...//其他控制器动作 } |
配置路由
在routes.php中添加一条路由:
Route::resource('test','TestController'); |
http://youwebsite/test,应该会输出这样一行内容:
“Call Me From TestServiceProvider In TestController”
此外,Laravel服务提供者还支持延迟加载,具体可参考服务提供者文档。
相关文章推荐
- workerman结合laravel开发在线聊天应用的示例代码
- 简单对比分析Ruby on Rails 和 Laravel
- laravel安装zend opcache加速器教程
- 使用 PHPStorm 开发 Laravel
- 跟我学Laravel之请求与输入
- 跟我学Laravel之视图 & Response
- PHP IDE PHPStorm配置支持友好Laravel代码提示方法
- Laravel 5.0 发布 新版本特性详解
- 详解PHP的Laravel框架中Eloquent对象关系映射使用
- 深入解析PHP的Laravel框架中的event事件操作
- 推荐几款用 Sublime Text 开发 Laravel 所用到的插件
- Laravel中使用阿里云OSS Composer包分享
- Laravel 4 初级教程之Pages、表单验证
- Laravel框架表单验证详解
- Laravel框架中扩展函数、扩展自定义类的方法
- Laravel 4 初级教程之安装及入门
- laravel安装和配置教程
- PHP开发框架laravel安装与配置教程
- 跟我学Laravel之安装Laravel
- 跟我学Laravel之配置Laravel