php yii2 service层,卩大王叫我来巡山

# 序言

#### service是什么?

在面向OO的系统里,service就是biz manager,在面向过程的系统里service就是TS脚本。

### service有什么作用?

service层的作用就是把这些需要多个model参与的复杂业务逻辑单独封装出来,这些model之间不再发生直接的依赖,而是在service层内协同完成逻辑。service层的第一个目的其实就是对model层进行解耦

# 需求分析

在Yii2框架中建立service层,专门处理公共且复杂的业务逻辑。

# 效果

![](http://www.77xunshan.com/uploads/article/2020-05-26/woaYrhAb6Fwe6dCO1E6aurgCY72SXRfZ1WeYqQRb.png)

在Yii2 base 项目根目录创建 service 目录,所有服务相关的代码全部放在这个目录,里面再区分不同模块

# 使用方法

```php

Yii::$app->service->appoint->hos($kuid)

//...do something else

```

# 实现方法

#### Service.php

- 文件名:Service.php

- 目录位置:common/services/Service.php

- 目的:服务层的基类

```php

namespace app\common\services;

use yii\base\BaseObject;

use yii\base\InvalidConfigException;

/**

* 下面这些都是 包含的服务

* @property \app\service\Appoint $appoint

* @property \app\service\Note $note

* @property \app\service\Sms $sms

*/

class Service extends BaseObject

{

public $childService;

public $childServiceList;

/**

* 得到services 里面配置的子服务childService的实例

* @param $childServiceName

* @return Service

* @throws InvalidConfigException

*/

public function getChildService($childServiceName)

{

if (!isset($this->childServiceList[$childServiceName])) {

$childService = $this->childService;

if (isset($childService[$childServiceName])) {

$service = $childService[$childServiceName];

$this->childServiceList[$childServiceName] = \Yii::createObject($service);

} else {

throw new InvalidConfigException(

'Child Service [' . $childServiceName . '] is not find in ' .

get_called_class() . ', you must config it! '

);

}

}

return $this->childServiceList[$childServiceName];

}

/**

*

* @param $attr

* @return object

* @throws InvalidConfigException

*/

public function __get($attr)

{

return $this->getChildService($attr);

}

}

```

#### service.php

- 文件名:service.php

- 目录位置:config/service.php

- 目的:服务配置文件

```php

return [

'appoint' => [ //预约系统相关服务

'class' => 'app\service\Appoint',

'childService' => [

'record' => 'app\service\appoint\Record', //预约系统子服务 记录相关

]

],

'note' => [

'class' => 'app\service\Note',

],

'sms' => [

'class' => 'app\service\Sms',

],

];

```

#### 使用方法

使用时,在console.php 或 web.php

```php

$services = require __DIR__ . '/service.php';

$config = [

//....other config

'components' => [

'service' => [

'class' => 'app\common\services\Service',

'childService' => $services

],

//other components

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值