您的位置:首页 > 编程语言 > PHP开发

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 学院的基础教程,这里把我的个人理解放这里,方便日后温故。


原理概括

第一步定义服务类。也就是我们具体的逻辑方法等,定义这个类又应该有契约约束,所以定义接口并让服务类继承实现,所以第一步是包括服务类和接口的定义。
第二步定义服务提供者。服务有了,需要专人负责实时所提供的服务,实例化对象和绑定在这里完成。
第三步注册服务。公司装修好了,设备也都能运转了,可要是向所有人提供服务就需要获得政府的认可和注册,告诉政府公司地址,以便管控。
第四步开店营业。所有事务都以准备完毕,可以开张营业了,店面负责展示和向公司提交订单等业务逻辑(路由、控制器和视图)。


案例实现


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服务提供者还支持延迟加载,具体可参考服务提供者文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  laravel 服务提供者