-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Services
liaofei edited this page Jan 20, 2021
·
1 revision
\app\services
具体services下在分块,可以根据不同功能划分;默认这里创建的services所有应用都可以使用,如果不同应用想单独创建services,请在应用目录下创建services目录,再具体实现不同services类
services是具体实现某个特定功能,比如用户的列表查看搜索、用户注册、登录等等都是具体功能
services<->dao<->model<->table
和UserDao对应UserServices,只需要在构造方法中注入UserDao就可以
<?php
declare (strict_types=1);
namespace app\services\user;
use app\services\BaseServices;
use app\dao\user\UserDao;
/**
*
* Class UserServices
* @package app\services\user
*/
class UserServices extends BaseServices
{
/**
* UserServices constructor.
* @param UserDao $dao
*/
public function __construct(UserDao $dao)
{
$this->dao = $dao;
}
public function getList()
{
}
}
具体查看列表功能应包括分页每一页数据,以及总条数;也就需要调用两个不同的dao方法
$list = $this->dao->getList($where,'*',$page,$limit);
$count = $this->dao->count($where);
每一个小的功能都可以定义为一个实现方法,比如:设置默认地址
/**
* 设置默认定制
* @param int $uid
* @param int $id
* @return bool
*/
public function setDefault(int $uid, int $id)
{
if (!$this->getAddress($id)) {
return false; //'地址不存在';
}
if (!$this->dao->update($uid, ['is_default' => 0], 'uid'))
return false; //'取消原来默认地址';
if (!$this->dao->update($id, ['is_default' => 1]))
return false; //'设置默认地址失败';
return true;
}
如果添加一个的地址,并选择了默认地址选项,则在添加的地址方法中调用setDefault
方法
public function add($uid,$data)
{
$data['uid] = $uid;
$res = $this->dao->save($data);
if(!$res)
return false;
if($data['is_default] == 1){
$this->setDefault($uid,$res['id]);
}
return true;
}
可以按照需要把不同功能点拆分为每一个方法,以实现代码的最大复用,不用重复造轮子
services可以在控制器中,也可以不同services之间互相调用(实现某一个复杂功能逻辑)
也是在构造方法中注入当前services,比如UserControlle注入 UserServices
<?php
namespace app\api\controller\v1\user;
use app\Request;
use app\services\user\UserServices;
/**
* 用户类
* Class UserController
* @package app\api\controller\store
*/
class UserController
{
protected $services = NUll;
/**
* UserController constructor.
* @param UserServices $services
*/
public function __construct(UserServices $services)
{
$this->services = $services;
}
}
使用UserServices具体方法可以使用$this->services
$this->services->getList();
某个特定方法注入某个services
/**
* 记录用户分享
* @param Request $request
* @return mixed
*/
public function user_share(Request $request, UserBillServices $services)
{
$uid = (int)$request->uid();
return app('json')->successful($services->setUserShare($uid));
}
UserBillServices用来记录每一次分享
首先引入需要使用的services
使用
app()->make()
来创建services类的实例
app()->make()
使用:
/** @var UserLevelServices $userLevel */
$userLevel = app()->make(UserLevelServices::class);
整体具体使用:
<?php
namespace app\services\user;
use app\services\BaseServices;
use app\dao\UserDao;
use app\services\user\UserBillServices;
class UserServices extends BaseServices
{
/**
* UserServices constructor.
* @param UserDao $dao
*/
public function __construct(UserDao $dao)
{
$this->dao = $dao;
}
/**
* 新增用户
*/
pulbic funciotn serUser($data,$spreaUid = 0)
{
$res = $this->dao->save($data);
if (!$res)
return false;
if ($spreadUid) {
/** @var UserBillServices $userBill */
$userBill = app()->make(UserBillServices::class);
//邀请新用户增加经验
$userBill->inviteUserIncExp((int)$spreadUid);
}
return $res;
}
}