mirror of
https://gitee.com/wonderful-code/buildadmin
synced 2024-11-21 06:29:50 +00:00
refactor:完善基类的类型定义
This commit is contained in:
parent
9eb7e84445
commit
2c3246ebf6
@ -4,8 +4,9 @@ declare (strict_types=1);
|
||||
namespace app;
|
||||
|
||||
use think\App;
|
||||
use think\exception\ValidateException;
|
||||
use think\Request;
|
||||
use think\Validate;
|
||||
use think\exception\ValidateException;
|
||||
|
||||
/**
|
||||
* 控制器基础类
|
||||
@ -14,36 +15,29 @@ abstract class BaseController
|
||||
{
|
||||
/**
|
||||
* Request实例
|
||||
* @var \think\Request
|
||||
* @var Request
|
||||
*/
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* 应用实例
|
||||
* @var App
|
||||
*/
|
||||
protected $app;
|
||||
protected Request $request;
|
||||
|
||||
/**
|
||||
* 是否批量验证
|
||||
* @var bool
|
||||
*/
|
||||
protected $batchValidate = false;
|
||||
protected bool $batchValidate = false;
|
||||
|
||||
/**
|
||||
* 控制器中间件
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [];
|
||||
protected array $middleware = [];
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
* @access public
|
||||
* @param App $app 应用对象
|
||||
*/
|
||||
public function __construct(App $app)
|
||||
public function __construct(protected App $app)
|
||||
{
|
||||
$this->app = $app;
|
||||
$this->request = $this->app->request;
|
||||
$this->request->controllerPath = str_replace('.', '/', $this->request->controller(true));
|
||||
|
||||
@ -51,8 +45,11 @@ abstract class BaseController
|
||||
$this->initialize();
|
||||
}
|
||||
|
||||
// 初始化
|
||||
protected function initialize()
|
||||
/**
|
||||
* 初始化
|
||||
* @access protected
|
||||
*/
|
||||
protected function initialize(): void
|
||||
{
|
||||
}
|
||||
|
||||
@ -60,13 +57,13 @@ abstract class BaseController
|
||||
* 验证数据
|
||||
* @access protected
|
||||
* @param array $data 数据
|
||||
* @param string|array $validate 验证器名或者验证规则数组
|
||||
* @param array|string $validate 验证器名或者验证规则数组
|
||||
* @param array $message 提示信息
|
||||
* @param bool $batch 是否批量验证
|
||||
* @return array|string|true
|
||||
* @throws ValidateException
|
||||
*/
|
||||
protected function validate(array $data, $validate, array $message = [], bool $batch = false)
|
||||
protected function validate(array $data, array|string $validate, array $message = [], bool $batch = false): bool|array|string
|
||||
{
|
||||
if (is_array($validate)) {
|
||||
$v = new Validate();
|
||||
@ -76,7 +73,7 @@ abstract class BaseController
|
||||
// 支持场景
|
||||
[$validate, $scene] = explode('.', $validate);
|
||||
}
|
||||
$class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
|
||||
$class = str_contains($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
|
||||
$v = new $class();
|
||||
if (!empty($scene)) {
|
||||
$v->scene($scene);
|
||||
|
@ -2,25 +2,23 @@
|
||||
|
||||
namespace app\admin\library\traits;
|
||||
|
||||
use Exception;
|
||||
use think\facade\Config;
|
||||
use Throwable;
|
||||
use think\facade\Db;
|
||||
use think\db\exception\PDOException;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Config;
|
||||
|
||||
/**
|
||||
* 后台控制器trait类
|
||||
* 已导入到 @var \app\common\controller\Backend 中
|
||||
* 已导入到 @see \app\common\controller\Backend 中
|
||||
* 若需修改此类方法:请复制方法至对应控制器后进行重写
|
||||
*/
|
||||
trait Backend
|
||||
{
|
||||
/**
|
||||
* 排除入库字段
|
||||
* @param $params
|
||||
* @return mixed
|
||||
* @param array $params
|
||||
* @return array
|
||||
*/
|
||||
protected function excludeFields($params)
|
||||
protected function excludeFields(array $params): array
|
||||
{
|
||||
if (!is_array($this->preExcludeFields)) {
|
||||
$this->preExcludeFields = explode(',', (string)$this->preExcludeFields);
|
||||
@ -36,8 +34,9 @@ trait Backend
|
||||
|
||||
/**
|
||||
* 查看
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function index()
|
||||
public function index(): void
|
||||
{
|
||||
$this->request->filter(['strip_tags', 'trim']);
|
||||
if ($this->request->param('select')) {
|
||||
@ -63,7 +62,7 @@ trait Backend
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
public function add()
|
||||
public function add(): void
|
||||
{
|
||||
if ($this->request->isPost()) {
|
||||
$data = $this->request->post();
|
||||
@ -77,7 +76,7 @@ trait Backend
|
||||
}
|
||||
|
||||
$result = false;
|
||||
Db::startTrans();
|
||||
$this->model->startTrans();
|
||||
try {
|
||||
// 模型验证
|
||||
if ($this->modelValidate) {
|
||||
@ -89,9 +88,9 @@ trait Backend
|
||||
}
|
||||
}
|
||||
$result = $this->model->save($data);
|
||||
Db::commit();
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
Db::rollback();
|
||||
$this->model->commit();
|
||||
} catch (Throwable $e) {
|
||||
$this->model->rollback();
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
if ($result !== false) {
|
||||
@ -106,8 +105,9 @@ trait Backend
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function edit()
|
||||
public function edit(): void
|
||||
{
|
||||
$id = $this->request->param($this->model->getPk());
|
||||
$row = $this->model->find($id);
|
||||
@ -128,7 +128,7 @@ trait Backend
|
||||
|
||||
$data = $this->excludeFields($data);
|
||||
$result = false;
|
||||
Db::startTrans();
|
||||
$this->model->startTrans();
|
||||
try {
|
||||
// 模型验证
|
||||
if ($this->modelValidate) {
|
||||
@ -140,9 +140,9 @@ trait Backend
|
||||
}
|
||||
}
|
||||
$result = $row->save($data);
|
||||
Db::commit();
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
Db::rollback();
|
||||
$this->model->commit();
|
||||
} catch (Throwable $e) {
|
||||
$this->model->rollback();
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
if ($result !== false) {
|
||||
@ -150,7 +150,6 @@ trait Backend
|
||||
} else {
|
||||
$this->error(__('No rows updated'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$this->success('', [
|
||||
@ -161,8 +160,9 @@ trait Backend
|
||||
/**
|
||||
* 删除
|
||||
* @param array $ids
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function del(array $ids = [])
|
||||
public function del(array $ids = []): void
|
||||
{
|
||||
if (!$this->request->isDelete() || !$ids) {
|
||||
$this->error(__('Parameter error'));
|
||||
@ -176,14 +176,14 @@ trait Backend
|
||||
$pk = $this->model->getPk();
|
||||
$data = $this->model->where($pk, 'in', $ids)->select();
|
||||
$count = 0;
|
||||
Db::startTrans();
|
||||
$this->model->startTrans();
|
||||
try {
|
||||
foreach ($data as $v) {
|
||||
$count += $v->delete();
|
||||
}
|
||||
Db::commit();
|
||||
} catch (PDOException|Exception $e) {
|
||||
Db::rollback();
|
||||
$this->model->commit();
|
||||
} catch (Throwable $e) {
|
||||
$this->model->rollback();
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
if ($count) {
|
||||
@ -197,8 +197,9 @@ trait Backend
|
||||
* 排序
|
||||
* @param int $id 排序主键值
|
||||
* @param int $targetId 排序位置主键值
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function sortable(int $id, int $targetId)
|
||||
public function sortable(int $id, int $targetId): void
|
||||
{
|
||||
$dataLimitAdminIds = $this->getDataLimitAdminIds();
|
||||
if ($dataLimitAdminIds) {
|
||||
@ -229,9 +230,9 @@ trait Backend
|
||||
$target = $this->model->find($targetId);
|
||||
}
|
||||
|
||||
$ebak = $target[$this->weighField];
|
||||
$backup = $target[$this->weighField];
|
||||
$target[$this->weighField] = $row[$this->weighField];
|
||||
$row[$this->weighField] = $ebak;
|
||||
$row[$this->weighField] = $backup;
|
||||
$row->save();
|
||||
$target->save();
|
||||
|
||||
@ -242,7 +243,7 @@ trait Backend
|
||||
* 加载为select(远程下拉选择框)数据,默认还是走$this->index()方法
|
||||
* 必要时请在对应控制器类中重写
|
||||
*/
|
||||
public function select()
|
||||
public function select(): void
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -18,13 +18,13 @@ class Api extends BaseController
|
||||
* 默认响应输出类型,支持json/xml/jsonp
|
||||
* @var string
|
||||
*/
|
||||
protected $responseType = 'json';
|
||||
protected string $responseType = 'json';
|
||||
|
||||
/**
|
||||
* 应用站点系统设置
|
||||
* @var bool
|
||||
*/
|
||||
protected $useSystemSettings = true;
|
||||
protected bool $useSystemSettings = true;
|
||||
|
||||
public function __construct(App $app)
|
||||
{
|
||||
@ -33,8 +33,9 @@ class Api extends BaseController
|
||||
|
||||
/**
|
||||
* 控制器初始化方法
|
||||
* @access protected
|
||||
*/
|
||||
protected function initialize()
|
||||
protected function initialize(): void
|
||||
{
|
||||
if ($this->useSystemSettings) {
|
||||
// ip检查
|
||||
@ -46,12 +47,14 @@ class Api extends BaseController
|
||||
}
|
||||
|
||||
parent::initialize();
|
||||
|
||||
// 设置默认过滤规则
|
||||
$this->request->filter('trim,strip_tags,htmlspecialchars');
|
||||
|
||||
// 加载控制器语言包
|
||||
$langset = $this->app->lang->getLangSet();
|
||||
$langSet = $this->app->lang->getLangSet();
|
||||
$this->app->lang->load([
|
||||
app_path() . 'lang' . DIRECTORY_SEPARATOR . $langset . DIRECTORY_SEPARATOR . (str_replace('/', DIRECTORY_SEPARATOR, $this->app->request->controllerPath)) . '.php'
|
||||
app_path() . 'lang' . DIRECTORY_SEPARATOR . $langSet . DIRECTORY_SEPARATOR . (str_replace('/', DIRECTORY_SEPARATOR, $this->app->request->controllerPath)) . '.php'
|
||||
]);
|
||||
}
|
||||
|
||||
@ -64,7 +67,7 @@ class Api extends BaseController
|
||||
* @param array $header 发送的 header 信息
|
||||
* @param array $options Response 输出参数
|
||||
*/
|
||||
protected function success(string $msg = '', $data = null, int $code = 1, string $type = null, array $header = [], array $options = [])
|
||||
protected function success(string $msg = '', mixed $data = null, int $code = 1, string $type = null, array $header = [], array $options = [])
|
||||
{
|
||||
$this->result($msg, $data, $code, $type, $header, $options);
|
||||
}
|
||||
@ -78,7 +81,7 @@ class Api extends BaseController
|
||||
* @param array $header 发送的 header 信息
|
||||
* @param array $options Response 输出参数
|
||||
*/
|
||||
protected function error(string $msg = '', $data = null, int $code = 0, string $type = null, array $header = [], array $options = [])
|
||||
protected function error(string $msg = '', mixed $data = null, int $code = 0, string $type = null, array $header = [], array $options = [])
|
||||
{
|
||||
$this->result($msg, $data, $code, $type, $header, $options);
|
||||
}
|
||||
@ -92,7 +95,7 @@ class Api extends BaseController
|
||||
* @param array $header 发送的 header 信息
|
||||
* @param array $options Response 输出参数
|
||||
*/
|
||||
public function result(string $msg, $data = null, int $code = 0, string $type = null, array $header = [], array $options = [])
|
||||
public function result(string $msg, mixed $data = null, int $code = 0, string $type = null, array $header = [], array $options = [])
|
||||
{
|
||||
$result = [
|
||||
'code' => $code,
|
||||
|
@ -2,81 +2,97 @@
|
||||
|
||||
namespace app\common\controller;
|
||||
|
||||
use Throwable;
|
||||
use think\Model;
|
||||
use think\facade\Db;
|
||||
use think\facade\Event;
|
||||
use think\facade\Cookie;
|
||||
use app\admin\library\Auth;
|
||||
use think\db\exception\PDOException;
|
||||
use think\exception\HttpResponseException;
|
||||
use think\facade\Cookie;
|
||||
use think\facade\Db;
|
||||
use think\facade\Event;
|
||||
|
||||
class Backend extends Api
|
||||
{
|
||||
/**
|
||||
* 无需登录的方法
|
||||
* 访问本控制器的此方法,无需管理员登录
|
||||
* 无需登录的方法,访问本控制器的此方法,无需管理员登录
|
||||
* @var array
|
||||
*/
|
||||
protected $noNeedLogin = [];
|
||||
protected array $noNeedLogin = [];
|
||||
|
||||
/**
|
||||
* 无需鉴权的方法
|
||||
* @var array
|
||||
*/
|
||||
protected $noNeedPermission = [];
|
||||
protected array $noNeedPermission = [];
|
||||
|
||||
/**
|
||||
* 新增/编辑时,对前端发送的字段进行排除(忽略不入库)
|
||||
* @var array|string
|
||||
*/
|
||||
protected $preExcludeFields = [];
|
||||
protected array|string $preExcludeFields = [];
|
||||
|
||||
/**
|
||||
* 权限类实例
|
||||
* @var Auth
|
||||
*/
|
||||
protected $auth = null;
|
||||
protected Auth $auth;
|
||||
|
||||
protected $model = null;
|
||||
/**
|
||||
* 模型类实例
|
||||
* @var object
|
||||
* @phpstan-var Model
|
||||
*/
|
||||
protected object $model;
|
||||
|
||||
/**
|
||||
* 权重字段
|
||||
* @var string
|
||||
*/
|
||||
protected $weighField = 'weigh';
|
||||
protected string $weighField = 'weigh';
|
||||
|
||||
/**
|
||||
* 默认排序
|
||||
* @var string|array
|
||||
*/
|
||||
protected $defaultSortField = 'id,desc';
|
||||
protected string|array $defaultSortField = 'id,desc';
|
||||
|
||||
/**
|
||||
* 表格拖拽排序时,两个权重相等则自动重新整理
|
||||
* config/buildadmin.php文件中的auto_sort_eq_weight为默认值
|
||||
* null=取默认值,false=关,true=开
|
||||
* @var null|bool
|
||||
*/
|
||||
protected $autoSortEqWeight = null;
|
||||
protected null|bool $autoSortEqWeight = null;
|
||||
|
||||
/**
|
||||
* 快速搜索字段
|
||||
* @var string|array
|
||||
*/
|
||||
protected $quickSearchField = 'id';
|
||||
protected string|array $quickSearchField = 'id';
|
||||
|
||||
/**
|
||||
* 是否开启模型验证
|
||||
* @var bool
|
||||
*/
|
||||
protected $modelValidate = true;
|
||||
protected bool $modelValidate = true;
|
||||
|
||||
/**
|
||||
* 是否开启模型场景验证
|
||||
* @var bool
|
||||
*/
|
||||
protected $modelSceneValidate = false;
|
||||
protected bool $modelSceneValidate = false;
|
||||
|
||||
/**
|
||||
* 关联查询方法名
|
||||
* 方法应定义在模型中
|
||||
* 关联查询方法名,方法应定义在模型中
|
||||
* @var array
|
||||
*/
|
||||
protected $withJoinTable = [];
|
||||
protected array $withJoinTable = [];
|
||||
|
||||
/**
|
||||
* 关联查询JOIN方式
|
||||
* @var string
|
||||
*/
|
||||
protected $withJoinType = 'LEFT';
|
||||
protected string $withJoinType = 'LEFT';
|
||||
|
||||
/**
|
||||
* 开启数据限制
|
||||
@ -87,23 +103,27 @@ class Backend extends Api
|
||||
* parent=上级分组中的管理员可查
|
||||
* 指定分组中的管理员可查,比如 $dataLimit = 2;
|
||||
* 启用请确保数据表内存在 admin_id 字段,可以查询/编辑数据的管理员为admin_id对应的管理员+数据限制所表示的管理员们
|
||||
* @var bool|string|int
|
||||
*/
|
||||
protected $dataLimit = false;
|
||||
protected bool|string|int $dataLimit = false;
|
||||
|
||||
/**
|
||||
* 数据限制字段
|
||||
* @var string
|
||||
*/
|
||||
protected $dataLimitField = 'admin_id';
|
||||
protected string $dataLimitField = 'admin_id';
|
||||
|
||||
/**
|
||||
* 数据限制开启时自动填充字段值为当前管理员id
|
||||
* @var bool
|
||||
*/
|
||||
protected $dataLimitFieldAutoFill = true;
|
||||
protected bool $dataLimitFieldAutoFill = true;
|
||||
|
||||
/**
|
||||
* 查看请求返回的主表字段控制
|
||||
* @var string|array
|
||||
*/
|
||||
protected $indexField = ['*'];
|
||||
protected string|array $indexField = ['*'];
|
||||
|
||||
/**
|
||||
* 引入traits
|
||||
@ -111,7 +131,12 @@ class Backend extends Api
|
||||
*/
|
||||
use \app\admin\library\traits\Backend;
|
||||
|
||||
public function initialize()
|
||||
/**
|
||||
* 初始化
|
||||
* @throws Throwable
|
||||
* @throws PDOException
|
||||
*/
|
||||
public function initialize(): void
|
||||
{
|
||||
parent::initialize();
|
||||
|
||||
@ -140,7 +165,7 @@ class Backend extends Api
|
||||
} elseif ($token) {
|
||||
try {
|
||||
$this->auth->init($token);
|
||||
} catch (HttpResponseException $e) {
|
||||
} catch (HttpResponseException) {
|
||||
}
|
||||
}
|
||||
|
||||
@ -291,6 +316,10 @@ class Backend extends Api
|
||||
return [$where, $alias, $limit, $order];
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据权限控制-获取有权限访问的管理员Ids
|
||||
* @throws Throwable
|
||||
*/
|
||||
protected function getDataLimitAdminIds(): array
|
||||
{
|
||||
if (!$this->dataLimit || $this->auth->isSuperAdmin()) {
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace app\common\controller;
|
||||
|
||||
use Throwable;
|
||||
use think\facade\Event;
|
||||
use think\facade\Cookie;
|
||||
use app\common\library\Auth;
|
||||
@ -12,21 +13,28 @@ class Frontend extends Api
|
||||
/**
|
||||
* 无需登录的方法
|
||||
* 访问本控制器的此方法,无需会员登录
|
||||
* @var array
|
||||
*/
|
||||
protected $noNeedLogin = [];
|
||||
protected array $noNeedLogin = [];
|
||||
|
||||
/**
|
||||
* 无需鉴权的方法
|
||||
* @var array
|
||||
*/
|
||||
protected $noNeedPermission = [];
|
||||
protected array $noNeedPermission = [];
|
||||
|
||||
/**
|
||||
* 权限类实例
|
||||
* @var Auth
|
||||
*/
|
||||
protected $auth = null;
|
||||
protected Auth $auth;
|
||||
|
||||
public function initialize()
|
||||
/**
|
||||
* 初始化
|
||||
* @throws Throwable
|
||||
* @throws HttpResponseException
|
||||
*/
|
||||
public function initialize(): void
|
||||
{
|
||||
parent::initialize();
|
||||
$this->auth = Auth::instance();
|
||||
@ -47,7 +55,7 @@ class Frontend extends Api
|
||||
} elseif ($token) {
|
||||
try {
|
||||
$this->auth->init($token);
|
||||
} catch (HttpResponseException $e) {
|
||||
} catch (HttpResponseException) {
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user