thinkphp6仅自动加载app/common.php,多模块需在bootstrap.php中统一引入;模板中调用须用|语法,如{$time|format_time}。

ThinkPHP6 引入公共函数文件,核心就一条:框架只自动加载 app/common.php 这一个文件,其他全靠手动干预。搞错位置或加载时机,立刻报 Call to undefined function。
默认方式:只认 app/common.php
TP6 不再扫描 Common 目录,也不支持自动加载多个函数文件。你只需把所有通用函数(如时间格式化、订单号生成、手机号脱敏等)统一写进:
-
路径必须是
app/common.php(小写 app,不能是 App 或 COMMON) - 文件名必须是
common.php,不能加版本号或后缀 - 函数定义里不用写
if (!function_exists('xxx'))—— 它只会被 require_once 一次 - 函数必须有返回值,不能用引用参数(
&$param) - 控制器、模型、中间件中可直接调用,例如:
format_time(time())
多模块(多应用)场景:改用 bootstrap.php 统一引入
如果你的项目用了多应用模式(比如有 app/admin/、app/api/),那么 app/common.php 默认只对主应用生效,admin 和 api 模块调用会报错。
正确做法是:在所有模块共用的入口点统一加载——即修改 app/bootstrap.php:
- 在项目根目录新建共享函数文件,例如
common/functions.php - 打开
app/bootstrap.php,在顶部添加:require_once __DIR__ . '/../common/functions.php'; - 确保
app/admin/bootstrap.php和app/api/bootstrap.php存在(内容可为空,但文件必须存在) -
禁止 把函数文件放在
app/admin/common.php或类似路径下,Swoole 常驻模式 reload 时可能重复定义或丢失
模板中调用函数:必须用 | 管道语法
在视图(.html 文件)里不能直接写 format_time($time),必须通过系统提供的过滤器机制:
- 函数需为纯返回型(不能 echo/print)、无副作用
- 在模板中使用:
{$time|format_time}或{$data|my_dump} - 如果函数带多个参数,用冒号分隔,例如:
{$id|get_user_name:1}
不推荐但可行:手动 require_once(仅限特殊场景)
某些临时逻辑或命令行任务中,可以手动引入:
- 在控制器方法开头写:
require_once app()->getAppPath() . '../common/utils.php'; - 注意路径要准确,且确保不会被多次执行(避免重复定义)
- 该方式不适用于 Swoole 常驻进程环境,容易出错,仅作应急
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











