Yii2 新增service层
第一种方法呢 ,就是 像 Yii::$app 中的 $app一样配置一个静态变量 $serivce
还有就是建一个service 组件(component)的方法 相关配置如下
│ ├─common │ │─config │ │ bootstrap.php │ │ main.php │ └─components │ │ Service.php │ │ │ ├─services │ Application.php
单独建立services文件夹用来存放服务层文件
config里面的 bootstrap.php 加上路径
Yii::setAlias('@services', dirname(dirname(__DIR__)) . '/services');config 里main.php配置service组件
'components' => [ ...... /** ------ 服务层 ------ **/ 'services' => [ 'class' => 'services\Application', ], ......
service.php
<?php
namespace common\components ;
use Yii ;
use yii\base\Component;
use yii\base\InvalidConfigException;
class Service extends Component{
public $childService;
/**
* 已实例化的子服务
*
* @var
*/
protected $_childService;
/**
* 获取 services 里面配置的子服务 childService 的实例
*
* @param $childServiceName
* @return mixed
* @throws InvalidConfigException
*/
protected function getChildService($childServiceName)
{
if (!isset($this->_childService[$childServiceName])) {
$childService = $this->childService;
if (isset($childService[$childServiceName])) {
$service = $childService[$childServiceName];
$this->_childService[$childServiceName] = Yii::createObject($service);
} else {
throw new InvalidConfigException('Child Service [' . $childServiceName . '] is not find in ' . get_called_class() . ', you must config it! ');
}
}
return $this->_childService[$childServiceName] ?? null;
}
/**
* @param string $attr
* @return mixed
* @throws InvalidConfigException
*/
public function __get($attr)
{
return $this->getChildService($attr);
}
}Application.php 其实就是注册服务
<?php
namespace services;
use common\components\Service ;
class Application extends Service
{
// service 层的使用方法
// public $childService = [
// 'example' => [
// 'class' => 'services\example\ExampleService',
// // 子服务
// 'childService' => [
// 'rule' => [
// 'class' => 'services\example\rule\RuleService',
// ],
// ],
// ],
// ];
//$service = Yii::$app->services->example->index();
//$childService = Yii::$app->services->example->rule->index();
/**
* @var array
*/
public $childService = [];
}更多内容请付费阅读
评论区
请登陆 后评论!