yunzer/app/admin/controller/BaseController.php
2025-06-07 09:15:14 +08:00

149 lines
3.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* 商业使用授权协议
*
* Copyright (c) 2025 [云泽网]. 保留所有权利.
*
* 本软件仅供评估使用。任何商业用途必须获得书面授权许可。
* 未经授权商业使用本软件属于侵权行为,将承担法律责任。
*
* 授权购买请联系: 357099073@qq.com
* 官方网站: https://www.yunzer.cn
*
* 评估用户须知:
* 1. 禁止移除版权声明
* 2. 禁止用于生产环境
* 3. 禁止转售或分发
*/
declare (strict_types = 1);
namespace app\admin\controller;
use think\App;
use think\exception\ValidateException;
use think\Validate;
/**
* 后台控制器基础类
*/
abstract class BaseController extends Base
{
/**
* Request实例
* @var \think\Request
*/
protected $request;
/**
* 应用实例
* @var \think\App
*/
protected $app;
/**
* 是否批量验证
* @var bool
*/
protected $batchValidate = false;
/**
* 控制器中间件
* @var array
*/
protected $middleware = [];
/**
* 构造方法
* @access public
* @param App $app 应用对象
*/
public function __construct(App $app)
{
parent::__construct();
$this->app = $app;
$this->request = $this->app->request;
// 控制器初始化
$this->initialize($app);
}
/**
* 初始化
* @access public
* @param App $app 应用对象
*/
public function initialize(App $app)
{
// 注册控制器映射
$this->registerControllerMap();
}
/**
* 注册控制器映射
*/
protected function registerControllerMap()
{
// 获取当前控制器类名
$className = get_class($this);
// 获取不带命名空间的类名
$shortName = substr($className, strrpos($className, '\\') + 1);
// 移除Controller后缀
$mapName = str_replace('Controller', '', $shortName);
// 调试信息
trace("Controller Mapping: {$mapName} => {$className}", 'debug');
// 注册控制器映射
$this->app->route->setControllerMap($mapName, $className);
}
/**
* 获取控制器名称移除Controller后缀
* @return string
*/
public function getControllerName()
{
$className = get_class($this);
$className = substr($className, strrpos($className, '\\') + 1);
return str_replace('Controller', '', $className);
}
/**
* 验证数据
* @access protected
* @param array $data 数据
* @param string|array $validate 验证器名或者验证规则数组
* @param array $message 提示信息
* @param bool $batch 是否批量验证
* @return array|string|true
* @throws ValidateException
*/
protected function validate(array $data, $validate, array $message = [], bool $batch = false)
{
if (is_array($validate)) {
$v = new Validate();
$v->rule($validate);
} else {
if (strpos($validate, '.')) {
// 支持场景
[$validate, $scene] = explode('.', $validate);
}
$class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
$v = new $class();
if (!empty($scene)) {
$v->scene($scene);
}
}
$v->message($message);
// 是否批量验证
if ($batch || $this->batchValidate) {
$v->batch(true);
}
return $v->failException(true)->check($data);
}
}