Services层详解

services层属于dao层之下,最接近控制器层的。所有的业务逻辑都可以写在services层中。在析构函数中,注入对应的dao层来操作数据库。

services内置方法

获取当前分页页码和展示条数,会根据系统配置返回不大于配置的展示条数

public function getPageValue(bool $isPage = true, bool $isRelieve = true)

数据库事务操作

public function transaction(callable $closure, bool $isTran = true)

创建token

public function createToken(int $id, $type)

获取路由地址

public function url(string $path, array $params = [], bool $suffix = false, bool $isDomain = false)

密码hash加密

public function passwordHash(string $password)

创建一个UserServices,引入刚才上一章创建的UserDao

namespase app\services;

user app\services\BaseServices;
use app\dao\UserDao;

class UserServices extends BaseServices
{

    public function __construct(UserDao $dao)
    {
        $this->dao = $dao;
    }

}

引入后,就可以在UserServices中写自己的逻辑

ServicesTrait继承方法

ServicesTrait主要用来辅助IDE来,提示函数操作,在其他地方实例化services可以直接调用到dao层的方法。

namespase app\services;

user app\services\BaseServices;
use app\dao\UserDao;
use crmeb\traits\ServicesTrait;

class UserServices extends BaseServices
{

    use ServicesTrait;

    public function __construct(UserDao $dao)
    {
        $this->dao = $dao;
    }

}

查询用户uid=1的用户

get方法属于dao层中基类中的

use app\services\UserServices;

 /** @var UserServices $service */
$service = app()->make(UserServices::class);

$res = $service->get(1);

var_dump($res->toArray());

使用了UserServices不知道当前的service操作的是哪个模型

UserServices前面的user就是相关的模型信息

起service类名的时候一定要和相关的模型名称保持一致,这样才能一眼就能看出操作的数据库是哪一个。