此控制再app/下,建议所有应用的商户端控制器都继承此类。其结构如下:
namespace app; use app\common\service\Tenant as TenantService; use app\tenant\service\Auth; use Webman\Http\Request; class TenantController extends BaseController { /** * 数据库实例 * @var BaseModel */ protected $model = null; /** * 控制器方法 * @var string */ public $action = null; /** * 控制器/方法名 * @var string */ public $method = null; /** * 获取模板 * @access protected * @var string */ public $theme = 'default'; protected $pk = 'id'; protected $captchaKey = 'captchaTenant'; protected $insertCompanyId = true; /** * 构造函数 */ public function __construct() { //只有在启动时执行 parent::__construct(); } /** * 商户id条件 * @param string $alias * @param array $tenant_info * @return array * Author: fudaoji<fdj@kuryun.cn> * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function tenantWhere($alias = '', $tenant_info = []){ $alias = $alias ? $alias.'.' : ''; $tenant_info = empty($tenant_info) ? $this->tenantInfo() : $tenant_info; return [$alias . 'company_id', '=', TenantService::getCompanyId($tenant_info)]; } /** * 租户信息 * @param null $key * @return mixed|null * Author: fudaoji<fdj@kuryun.cn> */ public function tenantInfo($key = null){ $admin = request()->session()->get(SESSION_TENANT); return $key!==null ? $admin[$key] : $admin; } /** * 设置一条或者多条数据的状态 * @Author fudaoji<fdj@kuryun.cn> */ public function setStatus() { $ids = input('ids'); $status = input('status'); if (empty($ids)) { return $this->error('请选择要操作的数据'); } $ids = (array) $ids; if($status == 'delete'){ $where = [[$this->pk, 'in', $ids]]; $this->insertCompanyId && $where[] = $this->tenantWhere(); if($this->model->where($where)->delete()){ return $this->success('删除成功'); }else{ return $this->error('删除失败'); } }else{ $arr = []; $msg = [ 'success' => '操作成功!', 'error' => '操作失败!', ]; $data['status'] = abs(input('val', 0) - 1); $this->insertCompanyId && $data['company_id'] = TenantService::getCompanyId(); foreach($ids as $id){ $data[$this->pk] = $id; $arr[] = $data; } if($this->model->saveAll($arr)){ return $this->success($msg['success']); }else{ return $this->error($msg['error']); } } } /** * 保存数据 * @param Request $request * @param string $jump * @param array $data * @return mixed */ public function savePost(Request $request, $jump = '', $data = []){ $post_data = $data ? $data : $request->post(); try { if(empty($post_data[$this->pk])){ $this->insertCompanyId && $post_data['company_id'] = TenantService::getCompanyId(); $res = $this->model->create($post_data); }else { $res = $this->model->update($post_data); } if($res){ return $this->success("操作成功!", $jump); }else{ return $this->error("未修改数据无需提交", null, ['token' => token()]); } }catch (\Exception $e){ $msg = $e->getMessage(); return $this->error($msg, null, ['token' => token()]); } } }