CRMEB多商户二开流程介绍

本文介绍一下CRMEB多商户二次开发的操作流程,从创建数据库,到实现一个完整添加数据的过程,其他更多方法实现只是路由和方法名的差异,也就不过多赘述。
一、创建数据库
例如数据库名为:eb_is_test
字段为:id,name
SQL:
CREATE TABLE eb_is_test (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
name varchar(111) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
二、创建必要文件,为了更好的管理我给这个模块单独增加一个test文件目录。
1.首创建model :
路径:app/common/moel/test/IsTest.php
代码如下:
namespace app\common\model\test;
【CRMEB多商户二开流程介绍】use app\common\model\BaseModel;
class IsTest extends BaseModel
{

public static function tablePk(): ?string { return 'id'; }public static function tableName(): string { return 'is_test'; }

}
2.创建dao文件:
路径 :app/common/dao/test/IsTestDao.php
代码如下:
namespace app\common\dao\test;
use app\common\dao\BaseDao;
use app\common\model\test\IsTest;
class IsTestDao extends BaseDao
{
/** * @return string * @author Qinii */ protected function getModel(): string { return IsTest::class; }

}
3.创建repoository文件
路径:app/common/repoository/test/IsTestRepoository.php
代码如下:
namespace app\common\repositories\test;
use app\common\dao\test\IsTestDao;
use app\common\repositories\BaseRepository;
class IsTestRepository extends BaseRepository
{
protected $dao; public function __construct(IsTestDao $dao) { $this->dao = $dao; }

}
4.创建contorller,我们创建平台的控制器吧(平台后台的操作那就在admin,商户就是merchant)。
路径:app/conotroller/admin/test/IsTest.php
代码如下:
namespace app\controller\admin\test;
use app\common\repositories\test\IsTestRepository;
use crmeb\basic\BaseController;
use think\App;
class IsTest extends BaseController
{
protected $repository; public function __construct(App $app,IsTestRepository $repository) { parent::__construct($app); $this->repository = $repository; }

}
这样我们的必备的几个基础文件就好了,以上每个文件中的方法,都是必须创建的,否则会报错。
三、增加路由,开发功能。
1.因为是平台功能,就在route/admin.php文件增加路由,修改路由文件后记得重启一下swoole服务。
Route::group('is_test',function(){
Route::post('create', '/create')->name('systemIsTestCreate');

})->prefix('admin.test.IsTest);
2.在controller文件中写相对应的功能,创建方法create,如下:
namespace app\controller\admin\test;
use app\common\repositories\test\IsTestRepository;
use crmeb\basic\BaseController;
use think\App;
class IsTest extends BaseController
{
protected $repository; public function __construct(App $app,IsTestRepository $repository) { parent::__construct($app); $this->repository = $repository; }public function create() { $data = https://www.it610.com/article/$this->request->params(['name']); $this->repository->create($data); return app('json')->success('添加成功'); }

}
这样我们的一个添加数据的功能就完成了,当然如果有更多数据和逻辑需要处理,就可以在IsTestRepository 这个文件中创建一个create()方法,然后做想相对应的处理,比如把name存储为json字符串,代码如下:
namespace app\common\repositories\test;
use app\common\dao\test\IsTestDao;
use app\common\repositories\BaseRepository;
class IsTestRepository extends BaseRepository
{
protected $dao; public function __construct(IsTestDao $dao) { $this->dao = $dao; }public function create($data) { $data = https://www.it610.com/article/['name' => json_encode($data) ]; $this->dao->create($data); }

}
以上就是一个完整的二开流程,如果需要调用别的控制器的方法可以是用make方法,例如想在添加的时候调用user表查看数据:
namespace app\common\repositories\test;
use app\common\dao\test\IsTestDao;
use app\common\repositories\BaseRepository;
use app\common\repositories\user\UserRepository;
class IsTestRepository extends BaseRepository
{
protected $dao; public function __construct(IsTestDao $dao) { $this->dao = $dao; }public function create($data) { //$user = app()->make(UserRepository::class)->get(1); //此处方法和上面一行的写法一致,只是这样写可以不用重复make $make = app()->make(UserRepository::class); $user = $make->get(1); $data = https://www.it610.com/article/['name' => json_encode($data) ]; $this->dao->create($data); }

}
controller主要是针对路由对外访问的接口方法,repoository就是写一些公用的会重复利用的逻辑处理等方法,dao针对数据库的操作。
如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star: http://github.crmeb.net/u/defu 不胜感激 !

    推荐阅读