0
点赞
收藏
分享

微信扫一扫

crmeb多商户二开接口流程文档Repository【4】

Repository

  • 定义

目录

 
  1. \app\common\repository

repository是具体实现某个特定功能,比如用户的列表查看搜索、用户注册、登录等等都是具体功能

 
  1. repository<->dao<->model<->table

和UserDao对应UserRepository,只需要在构造方法中注入UserDao就可以

 
  1. namespace app\common\repositories\user;
  2. use app\common\dao\user\UserDao;
  3. class UserRepository extends BaseRepository
  4. {
  5. protected $dao;
  6. public function __construct(UserDao $dao)
  7. {
  8. $this->dao = $dao;
  9. }
  10. public function getList(array $where, int $page, int $limit)
  11. {
  12. $query = $this->dao->search($where);
  13. $list = $query->page($page,$limit)->select();
  14. $count =$query->count();
  15. return compact('count','list');
  16. }
  17. }

每一个小的功能都可以定义为一个实现方法,比如:设置默认地址

 
  1. /**
  2. * 设置默认定制
  3. * @param int $uid
  4. * @param int $id
  5. * @return bool
  6. */
  7. public function setDefault(int $uid, int $id)
  8. {
  9. if (!$this->getAddress($id)) {
  10. return false; //'地址不存在';
  11. }
  12. if (!$this->dao->update($uid, ['is_default' => 0], 'uid'))
  13. return false; //'取消原来默认地址';
  14. if (!$this->dao->update($id, ['is_default' => 1]))
  15. return false; //'设置默认地址失败';
  16. return true;
  17. }

如果添加一个的地址,并选择了默认地址选项,则在添加的地址方法中调用setDefault方法

 
  1. public function add($uid,$data)
  2. {
  3. $data['uid] = $uid;
  4. $res = $this->dao->save($data);
  5. if(!$res)
  6. return false;
  7. if($data['is_default] == 1){
  8. $this->setDefault($uid,$res['id]);
  9. }
  10. return true;
  11. }
  • 使用

    repository可以在控制器中,也可以不同repository之间互相调用(实现某一个复杂功能逻辑)

    控制器中使用

    也是在构造方法中注入当前repository,比如UserControlle注入 UserRepository
    ```
    namespace app\controller;

use app\Request;

use app\common\repositories\user\UserRepository;

class User
{
protected $repository;
public function construct(App $app, repository $repository)
{
parent::
construct($app);
$this->repository = $repository;
}

 
  1. public function lst($cid)
  2. {
  3. [$page, $limit] = $this->getPage();
  4. $where = $this->request->params(['id']);
  5. $data = $this->repository->getList($where, $page, $limit);
  6. return app('json')->success($data);
  7. }

}

 
  1. 使用UserRepository具体方法可以使用`$this->repository`

$this->repository->search();

 
  1. ### 控制器中方法注入
  2. 某个特定方法注入某个repository

/**

  • 记录用户分享
  • @param Request $request
  • @return mixed
    */
    public function user_share(Request $request, UserBillRepository $services)
    {
    $uid = (int)$request->uid();
    return app(‘json’)->successful($services->setUserShare($uid));
    }
    ```
    UserBillServices用来记录每一次分享

    不同services之间互相调用

    首先引入需要使用的repository

app()->make()使用:

 
  1. /** @var UserReposotiroy $user */
  2. $user = app()->make(UserReposotiroy::class);
举报

相关推荐

0 条评论