⚙️ 内置函数

ThinkAdmin 提供丰富的内置函数库,可在系统的任意位置直接调用,简化开发流程。

📚 基础概念

🤔 基本介绍

内置函数是 ThinkAdmin 框架提供的全局函数,可以在系统的任意位置(控制器、模型、视图等)直接调用,无需引入类或命名空间。

简单理解:就像 PHP 的内置函数(如 strlen()array_merge()),ThinkAdmin 也提供了自己的内置函数,可以直接使用。

实际例子

// 普通方式(需要引入类)
use think\admin\service\AdminService;
if (AdminService::isSuper()) {
    // ...
}

// 使用内置函数(无需引入)
if (auth('admin/user/index')) {
    // ...
}

🤔 使用优势

优势1:简化代码

使用内置函数可以简化代码,无需实例化类:

// ❌ 不使用内置函数:需要引入和实例化
use think\admin\service\AdminService;
if (AdminService::isSuper()) {
    // ...
}

// ✅ 使用内置函数:直接调用
if (auth('admin/user/index')) {
    // ...
}

优势2:全局可用

内置函数可以在任何地方使用,无需考虑命名空间:

// 在控制器中
public function index()
{
    $url = admuri('admin/user/index');
}

// 在模型中
public function getUrl()
{
    return admuri('admin/user/index');
}

// 在视图中
<!--{php}-->
$url = admuri('admin/user/index');
<!--{/php}-->

优势3:功能丰富

内置函数提供了常用的功能封装,满足日常开发需求:

// 系统配置
$siteName = sysconf('base.site_name');

// URL 生成
$url = admuri('admin/user/index');

// 权限检查
$isAuth = auth('admin/user/index');

// 数据转换
$arr = str2arr('1,2,3');

优势4:性能优化

内置函数经过优化,性能更好:

// 内置函数经过优化,性能更好
$url = admuri('admin/user/index');  // 快速生成 URL

📝 使用方法

内置函数可以直接调用,无需任何引入:

// 直接调用,无需 use 语句
$result = sysconf('base.site_name');
$url = admuri('admin/user/index');
$isAuth = auth('admin/user/index');

完整示例

<?php
namespace app\admin\controller;

use think\admin\Controller;

class User extends Controller
{
    public function index()
    {
        // 使用内置函数,无需引入
        $siteName = sysconf('base.site_name');
        $url = admuri('admin/user/index');
        $isAuth = auth('admin/user/index');
        
        // 使用内置函数处理数据
        $ids = str2arr(input('ids', ''));
        $idsStr = arr2str($ids);
        
        return $this->fetch();
    }
}

函数命名规范

ThinkAdmin 的内置函数通常使用小写字母和下划线,如:

  • sysconf() - 系统配置
  • admuri() - 后台 URL
  • auth() - 权限检查
  • sysoplog() - 操作日志

函数分类说明

  • 开发调试函数:用于调试和开发,如 p()m()
  • 权限安全函数:用于权限检查和安全防护,如 auth()systoken()
  • URL 路由函数:用于生成 URL 地址,如 admuri()sysuri()
  • 数据处理函数:用于数据处理和转换,如 arr2str()str2arr()
  • 系统配置函数:用于系统配置管理,如 sysconf()
  • 日志记录函数:用于记录操作日志,如 sysoplog()

🚀 主要功能

  • 全局可用: 在系统的任意位置直接调用
  • 功能丰富: 提供多种实用的内置函数
  • 开发简化: 简化常见操作的实现
  • 性能优化: 内置函数经过性能优化
  • 类型安全: 提供完整的参数类型说明
  • 文档完善: 详细的函数说明和示例

📋 函数分类

本文档按功能分类组织,方便快速查找:


🔧 开发调试函数

📝 打印输出数据

p() 函数用于输出数据并保存到 Runtime 目录下面的文件,方便调试。

函数签名

p($data, bool $new = false, ?string $file = null)

参数说明

  • $data(mixed):要输出的数据(可以是任何类型)
  • $new(bool):是否强制替换文件,默认为 false(追加模式)
  • $file(string|null):保存文件名称。如果为 null,则只输出数据而不保存到文件,默认为 null

返回值

  • 如果保存成功,返回保存到文件的字节数
  • 如果保存失败,返回 false

使用示例

// 1. 输出数据到默认文件(runtime/debug.log)
p($data);

// 2. 输出数据到指定文件
p($data, false, 'test.log');
// 文件保存在:runtime/test.log

// 3. 强制替换文件(清空后写入)
p($data, true, 'test.log');

// 4. 只输出数据,不保存到文件
p($data, false, null);
// 只在页面输出,不保存到文件

// 5. 实际应用:调试接口数据
public function api()
{
    $data = input('post.');
    p($data, false, 'api.log');  // 保存接口数据到文件
    
    // 处理数据
    // ...
}

实际应用场景

<?php
namespace app\admin\controller;

use think\admin\Controller;

class User extends Controller
{
    public function save()
    {
        // 调试:输出提交的数据
        $data = input('post.');
        p($data, false, 'user_save.log');
        
        // 处理数据
        // ...
    }
}

🔧 动态创建模型

m() 函数用于动态创建模型对象并初始化数据,无需手动引入模型类。

函数签名

m(string $name, array $data = [], string $conn = '')

参数说明

  • $name(string):模型名称(如 SystemUserSystemFile
  • $data(array):初始数据,默认为空数组
  • $conn(string):指定数据库连接,默认为空字符串(使用默认连接)

返回值

返回创建的模型对象(\think\admin\Model

使用示例

// 1. 创建模型对象(无初始数据)
$user = m('SystemUser');

// 2. 创建模型对象(带初始数据)
$user = m('SystemUser', ['username' => 'admin', 'password' => '123456']);

// 3. 创建模型对象(指定数据库连接)
$user = m('SystemUser', [], 'mysql2');

// 4. 实际应用:动态创建模型
public function index()
{
    $modelName = input('model', 'SystemUser');
    $model = m($modelName);  // 动态创建模型
    
    $list = $model->select();
    return $this->fetch('index', ['list' => $list]);
}

实际应用场景

<?php
namespace app\admin\controller;

use think\admin\Controller;

class Data extends Controller
{
    public function index()
    {
        // 根据参数动态创建模型
        $table = input('table', 'SystemUser');
        $model = m($table);
        
        // 查询数据
        $list = $model->select();
        
        return $this->fetch('index', ['list' => $list]);
    }
}

🔐 权限安全函数

🔐 权限节点检查

auth() 函数用于检查用户是否具有指定节点的权限。

函数签名

auth(?string $node): bool

参数说明

  • $node(?string):权限节点名称(如 admin/user/index),可选参数

返回值

  • 如果用户具有指定节点的权限,返回 true
  • 否则返回 false

使用示例

// 1. 检查单个权限节点
if (auth('admin/user/index')) {
    // 有权限,执行操作
}

// 2. 检查权限并执行不同逻辑
if (auth('admin/user/remove')) {
    // 有删除权限
    $this->canDelete = true;
} else {
    // 无删除权限
    $this->canDelete = false;
}

// 3. 在模板中使用
<!--{if auth('admin/user/remove')}-->
<button data-action="{:url('remove')}">删除</button>
<!--{/if}-->

// 4. 实际应用:根据权限显示不同按钮
public function index()
{
    $this->canEdit = auth('admin/user/edit');
    $this->canDelete = auth('admin/user/remove');
    return $this->fetch();
}

实际应用场景

<?php
namespace app\admin\controller;

use think\admin\Controller;

class User extends Controller
{
    public function index()
    {
        // 根据权限显示不同的操作按钮
        $this->canEdit = auth('admin/user/edit');
        $this->canDelete = auth('admin/user/remove');
        
        return $this->fetch();
    }
    
    public function remove()
    {
        // 再次检查权限(双重验证)
        if (!auth('admin/user/remove')) {
            $this->error('权限不足!');
        }
        
        // 执行删除操作
        // ...
    }
}

🌐 URL 路由函数

🔗 生成后台 URL

admuri() 函数用于快速生成后台可访问的 URL 地址,由 admin 入口及功能节点路径组成。

函数签名

admuri(string $url = '', array $vars = [], $suffix = true, $domain = false): string

参数说明

  • $url(string):路由地址(如 admin/user/index
  • $vars(array):URL 变量(如 ['id' => 1]
  • $suffix(boolean|string):生成的 URL 后缀,默认为 true.html
  • $domain(boolean|string):是否包含域名,默认为 false

返回值

返回生成的 URL 字符串

使用示例

// 1. 生成简单 URL
$url = admuri('admin/user/index');
// 输出:/admin/user/index.html

// 2. 生成带参数的 URL
$url = admuri('admin/user/edit', ['id' => 1]);
// 输出:/admin/user/edit/id/1.html

// 3. 生成不带后缀的 URL
$url = admuri('admin/user/index', [], false);
// 输出:/admin/user/index

// 4. 生成完整 URL(包含域名)
$url = admuri('admin/user/index', [], true, true);
// 输出:https://example.com/admin/user/index.html

// 5. 实际应用:在控制器中生成 URL
public function index()
{
    $editUrl = admuri('admin/user/edit', ['id' => 1]);
    $deleteUrl = admuri('admin/user/remove', ['id' => 1]);
    
    return $this->fetch('index', [
        'editUrl' => $editUrl,
        'deleteUrl' => $deleteUrl,
    ]);
}

实际应用场景

<?php
namespace app\admin\controller;

use think\admin\Controller;

class User extends Controller
{
    public function index()
    {
        // 生成操作 URL
        $this->editUrl = admuri('admin/user/edit', ['id' => 1]);
        $this->deleteUrl = admuri('admin/user/remove', ['id' => 1]);
        
        return $this->fetch();
    }
    
    public function save()
    {
        // 保存成功后跳转
        $this->success('保存成功!', admuri('admin/user/index'));
    }
}

🔗 生成系统 URL

sysuri() 函数用于生成最短可访问系统的 URL 地址,类似 ThinkPHP 的 URL 地址。

函数签名

sysuri(string $url = '', array $vars = [], $suffix = true, $domain = false): string

参数说明

  • $url(string):路由地址
  • $vars(array):URL 变量
  • $suffix(boolean|string):生成的 URL 后缀,默认为 true
  • $domain(boolean|string):是否包含域名,默认为 false

返回值

返回生成的 URL 字符串

使用示例

// 1. 生成简单 URL
$url = sysuri('index/index');
// 输出:/index/index.html

// 2. 生成带参数的 URL
$url = sysuri('index/detail', ['id' => 1]);
// 输出:/index/detail/id/1.html

// 3. 生成完整 URL
$url = sysuri('index/index', [], true, true);
// 输出:https://example.com/index/index.html

admuri()sysuri() 的区别

// admuri() - 生成后台 URL(自动添加 admin 前缀)
$url = admuri('user/index');
// 输出:/admin/user/index.html

// sysuri() - 生成系统 URL(不添加前缀)
$url = sysuri('user/index');
// 输出:/user/index.html

💾 数据处理函数

🔒 加密 UTF8 字符串

// 参数 string $content
// 返回 string
encode(string $content);

🔓 解密 UTF8 字符串

// 参数 string $content
// 返回 string
decode(string $content);

🔄 通用字符串转数组

// 参数 string $text 待转内容
// 参数 string $separ 分隔字符
// 参数 null|array $allow 限定规则
// 返回 array
str2arr(string $text, string $separ = ',', ?$allow=null);

🔄 通用数组转字符串

// 参数 string $data 待转数组
// 参数 string $separ 分隔字符
// 参数 null|array $allow 限定规则
// 返回 array
arr2str(array $data, string $separ = ',', ?$allow=null);

⚙️ 系统配置函数

🐛 调试模式判断

isDebug()

✅ 生产模式

isOnline()

⚙️ 获取或配置系统参数

// 参数 string $name 参数名称
// 参数 mixed $value 参数内容(可选,不传则获取,传则设置)
// 返回 mixed
sysconf(string $name, $value = '')

使用示例:

// 获取单个配置
$siteName = sysconf('base.site_name');

// 获取配置并设置默认值
$siteUrl = sysconf('base.site_url', 'https://thinkadmin.top');

// 设置单个配置
sysconf('base.site_name', 'ThinkAdmin');

// 批量设置配置
foreach ($post as $k => $v) {
    sysconf($k, $v);
}

🌐 生成管理后台 URL

// 参数 string $url 路由地址
// 参数 array $vars URL 变量
// 参数 bool|string $suffix 生成的 URL 后缀
// 参数 bool|string $domain 域名
// 返回 \think\route\Url
admuri(string $url = '', array $vars = [], $suffix = true, $domain = false)

使用示例:

// 生成管理后台 URL
$url = admuri('admin/config/index');
// 输出: /admin/config/index.html

// 带参数的 URL
$url = admuri('admin/user/edit', ['id' => 1]);
// 输出: /admin/user/edit/id/1.html

// 生成完整 URL
$url = admuri('admin/config/index', [], true, true);

🔄 数组与字符串转换

数组转字符串:

// 参数 array $data 数组数据
// 参数 string $separ 分隔符
// 参数 null|array $allow 限定规则
// 返回 string
arr2str(array $data, string $separ = ',', ?$allow=null)

字符串转数组:

// 参数 string $data 字符串数据
// 参数 string $separ 分隔符
// 返回 array
str2arr(string $data, string $separ = ',')

使用示例:

// 数组转字符串
$authorize = ['10001', '10002', '10003'];
$str = arr2str($authorize); // 输出: "10001,10002,10003"
$str = arr2str($authorize, '|'); // 输出: "10001|10002|10003"

// 字符串转数组
$str = "10001,10002,10003";
$arr = str2arr($str); // 输出: ['10001', '10002', '10003']
$arr = str2arr($str, '|'); // 输出: ['10001', '10002', '10003'] (如果使用 | 分隔符)

// 实际应用示例(在控制器中)
$data['authorize'] = arr2str($data['authorize'] ?? []); // 保存权限数组
$data['authorize'] = str2arr($data['authorize'] ?? ''); // 读取权限数组

💾 数据读取与存储

// JSON 数据读取与存储
// 参数 string $name 数据名称
// 参数 mixed $value 数据内容
// 返回 mixed
sysdata(string $name, $value)

📁 获取文件绝对路径

// 获取文件绝对路径
// 参数 string $name 文件路径名称
// 参数 string|null $root 根目录路径,默认为 null
// 返回 string 文件绝对路径
syspath(string $name, ?string $root = null)

📝 日志记录函数

📝 写入系统操作日志

// 参数 string $action 日志行为
// 参数 string $content 日志内容
// 返回 boolean
sysoplog(string $action, string $content)

🔐 生成 CSRF-TOKEN 参数

systoken();

⚡ 异步任务函数

⚡ 注册异步处理任务

// 参数 string $title 任务名称
// 参数 string $command 执行内容
// 参数 integer $later 延时执行时间
// 参数 array $data 任务附加数据
// 参数 integer $rscript 任务类型(0单例,1多例)
// 参数 integer $loops 循环等待时间
// 返回 string
sysqueue(string $title, string $command, int $later=0, array $data=[], int $rscript=0, int $loops=0)

🔐 Base64 安全 URL 编码

// 参数 string $string
// 返回 string
enbase64url(string $string);

🔓 Base64 安全 URL 解码

// 参数 string $string
// 返回 string
debase64url(string $string);

🛡️ 文本内容XSS过滤

// 参数 string $text
// 返回 string
xss_safe(string $text);

🌐 网络请求函数

🌐 以 get 模拟网络请求

// 参数 string $url HTTP请求URL地址
// 参数 array|string $query GET请求参数
// 参数 array $options CURL参数
// 返回 boolean|string
http_get(string $url, $query = [], array $options = []);

🌐 以 post 模拟网络请求

// 参数 string $url HTTP请求URL地址
// 参数 array|string $data POST请求数据
// 参数 array $options CURL参数
// 返回 boolean|string
http_post(string $url, $data = [], array $options = []);

💾 数据增量保存

// 参数 Model|Query|string $dbQuery
// 参数 array $data 需要保存或更新的数据
// 参数 string $key 条件主键限制
// 参数 mixed $where 其它的where条件
// 返回 boolean|integer
data_save($dbQuery, array $data = [], string $key='id', $where = []);

📁 文件处理函数

📥 下载远程文件到本地

// 参数 string $source 远程文件地址
// 参数 boolean $force 是否强制重新下载
// 参数 integer $expire 强制本地存储时间
// 返回 string
down_file(string $source, bool $force = false, int $expre = 0);

⚠️ 输出异常数据到文件

// 参数 \Exception $exception
// 返回 boolean
trace_file(\Exception $exception)

📊 文件字节单位转换

// 参数 string|integer $size 字节
// 返回 string
format_bytes($size);

📅 日期时间函数

📅 日期格式标准输出

// 参数 int|string $datetime 输入日期
// 参数 string $format 输出格式
// 返回 string
format_datetime($datetime, string $format = "Y年m月d日 H:i:s");

🎯 Controller 基类方法

Controller 基类方法来自 think-library 库,详细用法请参考对应的 Helper 文档。

🔧 控制器初始化(initialize)

initialize() 方法在控制器实例化后、执行具体方法前自动调用,用于初始化控制器属性或执行公共逻辑:

<?php
declare(strict_types=1);

namespace app\admin\controller;

use think\admin\Controller;
use think\admin\Storage;

/**
 * 系统文件管理
 * @class File
 * @package app\admin\controller
 */
class File extends Controller
{
    /**
     * 存储类型列表
     * @var array
     */
    protected $types;

    /**
     * 控制器初始化
     * @return void
     */
    protected function initialize()
    {
        // 初始化存储类型列表(所有方法都可以使用)
        $this->types = Storage::types();
        
        // 可以在这里进行权限检查、数据初始化等
        // 例如:检查用户是否有文件管理权限
    }

    /**
     * 文件列表
     * @auth true
     */
    public function index()
    {
        // $this->types 已经在 initialize() 中初始化
        $this->title = '系统文件管理';
        // ...
    }
}

initialize() 方法的使用场景:

  1. 初始化公共属性:为控制器设置公共变量
  2. 权限预检查:在执行方法前进行权限验证
  3. 数据预处理:加载公共数据或配置
  4. 接口初始化:在 API 控制器中初始化接口服务

实际应用示例(接口控制器):

<?php
declare(strict_types=1);

namespace app\data\controller\api;

use think\admin\Controller;
use think\admin\service\InterfaceService;

/**
 * API 基础控制器
 * @class Auth
 * @package app\data\controller\api
 */
class Auth extends Controller
{
    /**
     * 当前请求数据
     * @var array
     */
    protected $data;

    /**
     * 接口账号信息
     * @var array
     */
    protected $user;

    /**
     * 接口服务对象
     * @var InterfaceService
     */
    protected $interface;

    /**
     * 接口授权初始化(从数据库读取账号)
     */
    protected function initialize()
    {
        // 接口实例初始化
        $this->interface = InterfaceService::instance();

        // 验证 appid 参数
        $map = $this->_vali(['appid.require' => '参数APPID不能为空!']);
        
        // 从数据库中查询账号
        $this->user = $this->app->db->name('AppUser')->where($map)->find();

        // 验证账号是否存在
        if (empty($this->user)) {
            $this->interface->error('接口账号不存在!');
        }

        // 验证账号状态
        if (empty($this->user['status'])) {
            $this->interface->error('接口账号已被禁用!');
        }

        // 接口数据初始化
        $this->interface->setAuth($this->user['appid'], $this->user['appkey']);
        
        // 获取并验证接口数据
        $this->data = $this->interface->getData();
    }
}

🔐 AdminService 服务类

AdminService 提供用户认证和权限相关的服务方法:

use think\admin\service\AdminService;

// 检查是否为超级管理员
if (AdminService::isSuper()) {
    // 超级管理员逻辑
}

// 获取当前登录用户ID
$userId = AdminService::getUserId();

// 检查用户是否已登录
if (AdminService::isLogin()) {
    // 已登录逻辑
}

// 获取超级管理员账号名
$superName = AdminService::getSuperName();  // 默认:admin

// 获取当前登录用户信息
$userInfo = AdminService::getUserInfo();

实际应用示例:

<?php
declare(strict_types=1);

namespace app\admin\controller;

use think\admin\Controller;
use think\admin\model\SystemFile;
use think\admin\service\AdminService;

class File extends Controller
{
    /**
     * 删除系统文件
     * @auth true
     */
    public function remove()
    {
        // 非超级管理员只能删除自己的文件
        if (!AdminService::isSuper()) {
            $where = ['uuid' => AdminService::getUserId()];
        }
        SystemFile::mDelete('', $where ?? []);
    }

    /**
     * 系统配置
     * @auth true
     */
    public function index()
    {
        $this->title = '系统参数配置';
        $this->issuper = AdminService::isSuper();
        
        // 超级管理员密码未修改提示
        if (AdminService::isSuper() && $this->app->session->get('user.password') === md5('admin')) {
            $url = url('admin/index/pass', ['id' => AdminService::getUserId()]);
            $this->showErrorMessage = lang("超级管理员账号的密码未修改,建议立即<a data-modal='%s'>修改密码</a>!", [$url]);
        }
    }
}

⚙️ ModuleService 服务类

ModuleService 提供模块和插件相关的服务方法:

use think\admin\service\ModuleService;

// 获取系统运行变量
$systemId = ModuleService::getRunVar('uni');

// 获取库版本信息
$framework = ModuleService::getLibrarys('topthink/framework');
$thinkadmin = ModuleService::getLibrarys('zoujingli/think-library');

实际应用示例:

<?php
declare(strict_types=1);

namespace app\admin\controller;

use think\admin\Controller;
use think\admin\service\ModuleService;

class Config extends Controller
{
    /**
     * 系统参数配置
     * @auth true
     * @menu true
     */
    public function index()
    {
        $this->title = '系统参数配置';
        $this->systemid = ModuleService::getRunVar('uni');
        $this->framework = ModuleService::getLibrarys('topthink/framework');
        $this->thinkadmin = ModuleService::getLibrarys('zoujingli/think-library');
        $this->fetch();
    }
}

🔄 RuntimeService 服务类

RuntimeService 提供运行时配置管理:

use think\admin\service\RuntimeService;

// 设置运行时配置
RuntimeService::set(null, ['xpath' => 'admin']);

// 获取运行时配置
$config = RuntimeService::get();

🛠️ SystemService 服务类

SystemService 提供系统级别的服务方法:

use think\admin\service\SystemService;

// 设置网站图标
SystemService::setFavicon($iconUrl);

响应方法

// 成功响应
// 参数 mixed $info 消息内容
// 参数 mixed $data 返回数据,默认为 '{-null-}'(会转换为空对象)
// 参数 mixed $code 返回代码,默认为 1
// 返回 void(直接输出响应)
success($info, $data = '{-null-}', $code = 1)

// 错误响应
// 参数 mixed $info 消息内容
// 参数 mixed $data 返回数据,默认为 '{-null-}'(会转换为空对象)
// 参数 mixed $code 返回代码,默认为 0
// 返回 void(直接输出响应)
error($info, $data = '{-null-}', $code = 0)

// URL 重定向
// 参数 string $url 跳转链接
// 参数 int $code 跳转代码,默认为 302
// 返回 void
redirect(string $url, int $code = 302)

使用示例:

// 成功响应
$this->success('操作成功!', $data);

// 错误响应
$this->error('操作失败,请稍后重试!');

// 带跳转的成功响应
$this->success('数据保存成功!', admuri('admin/config/index'));

// URL 重定向
$this->redirect('/admin/user/index');

// URL 重定向
$this->redirect('/admin/user/index');

视图方法

// 返回视图内容
// 参数 string $tpl 模板名称
// 参数 array $vars 模板变量
// 参数 null|string $node 授权节点
// 返回 void
fetch(string $tpl = '', array $vars = [], ?string $node = null)

// 模板变量赋值
// 参数 mixed $name 要显示的模板变量(字符串或数组)
// 参数 mixed $value 变量的值(当 $name 为字符串时)
// 返回 Controller 实例(支持链式调用)
assign($name, $value = '')

使用示例:

// 返回视图
$this->fetch('user/index');

// 模板变量赋值
$this->assign('title', '用户管理');
// 或批量赋值
$this->assign(['title' => '用户管理', 'count' => 100]);

Helper 快捷方法

这些方法返回对应的 Helper 实例,详细用法请参考对应的 Helper 文档:

  • _query(): 快捷查询逻辑器,返回 QueryHelper 实例(详见 数据查询助手
  • _page(): 快捷分页逻辑器,返回分页数据数组
  • _form(): 快捷表单逻辑器,返回表单数据或处理表单提交(详见 快捷表单助手
  • _vali(): 快捷输入并验证,返回验证通过的数据数组
  • _save(): 快捷更新逻辑器,返回更新结果(详见 数据更新助手
  • _delete(): 快捷删除逻辑器,返回删除结果(详见 软硬删除助手

使用示例:

// 数据验证
$data = $this->_vali([
    'username.require' => '用户名不能为空!',
    'email.email'      => '邮箱格式不正确!',
    'status.in:0,1'    => '状态值范围异常!',
]);

// 创建异步任务
$this->_queue('重新计算所有会员级别', "xsync:member", 1, [], 0);

注意

  • _checkInput() 不是 Controller 基类的通用方法,而是开发者根据业务需求自定义的私有方法,用于安全检查等场景。
  • _applyFormToken() 是基类方法,但通常由 Helper 自动处理,开发者无需手动调用。
  • 更多 Helper 方法的详细用法,请参考对应的 Helper 文档。
最近更新:
Contributors: 邹景立, Anyon