五项家庭化改造:以个人为中心 · 家谱 · 三种角色 · 附件存储可配置 · 独立页样式
1. 独立页(登录/安装/错误)套上 HTML 骨架 —— 修「首页为什么没有样式」: 新增 templates/layout-bare.php,View::render 对独立页也走完整 <head> + CSS。 2. 以个人为中心:Kinship::label() 现算称呼、Auth::homeTitle() 出「X的家书」; 同一批人在不同登录者眼里自动变成公公婆婆 / 岳父岳母(不存一次性称谓)。 3. 附件存储可配置:Storage 门面(local / 阿里云 OSS),库里只存相对键, 云端失败自动回退本地;设置页可选驱动并填 OSS 参数(照 MovieLog 的方案)。 4. 三种角色:admin / member / guest,访客只读、写操作一律 403; accounts.role 枚举扩容,老库靠 Schema::ensure() 自动升级。 5. 家谱:只存相邻两代的边(parent / spouse),其余称呼全部推导 —— 兄弟姐妹不存边(共同父母 + birth_rank 排行推长子/次女、哥哥/妹妹), 认不清的人用虚拟人物 is_placeholder 占位,关系天然双向。 顺带修掉本地 e2e 挖出的 8 个线上级 bug(性别写死、长幼方向反、关系方向静默写反、 birth_rank 不从表单取回、隐式可空参数致响应头失效、无文件字段被误判为上传失败、 layout 变量撞车覆盖 $me、世代 0 显示成「下 0 代」)。 验证:kinship 单测 37/0 · HTTP e2e 81/0 · 老库升级专测 14/0 · 反向验证 11/11(把每个修复改回旧写法,对应断言都会变红)。
This commit is contained in:
+28
-1
@@ -21,6 +21,23 @@ function asset(string $rel): string
|
||||
return $rel . '?v=' . substr(md5(filemtime($p) . filesize($p)), 0, 8);
|
||||
}
|
||||
|
||||
/**
|
||||
* 附件(头像等)地址 —— 全站唯一出口。
|
||||
* 走这里是纪律:数据库只存相对键,云端/本地的差异由 Storage 自己吸收。
|
||||
*/
|
||||
function storage_url(?string $key): string
|
||||
{
|
||||
$fid = \App\Auth::familyId();
|
||||
return \App\Storage\Storage::url((int)$fid, $key);
|
||||
}
|
||||
|
||||
/** 头像地址(无头像自动回退内置剪影) */
|
||||
function avatar_url(?string $key): string
|
||||
{
|
||||
$fid = (int)\App\Auth::familyId();
|
||||
return \App\Upload::avatarUrl($fid, $key);
|
||||
}
|
||||
|
||||
/** 站内链接(统一走 query-string 路由,不依赖 Apache 重写) */
|
||||
function url(string $route = 'home', array $query = []): string
|
||||
{
|
||||
@@ -39,7 +56,17 @@ function is_post(): bool
|
||||
return ($_SERVER['REQUEST_METHOD'] ?? 'GET') === 'POST';
|
||||
}
|
||||
|
||||
function fb_config(string $key = null, $default = null)
|
||||
/**
|
||||
* 读配置。
|
||||
*
|
||||
* ⚠️ `?string $key = null` 里的 `?` 不能省:PHP 8.4 起,
|
||||
* 「有类型 + 默认 null」而没写 `?` 的形式(隐式可空)会报 Deprecated。
|
||||
* 这个警告一旦在页面顶部打出来,就等于响应体已经输出 ——
|
||||
* 后面所有 header() 全部失效(典型症状:安装完/登录后**不再跳转**,
|
||||
* 返回 200 而不是 302,但功能其实是好的,极难排查)。
|
||||
* 线上跑 PHP 7.4/8.1 时不报,所以本地用新 PHP 才抓得到。
|
||||
*/
|
||||
function fb_config(?string $key = null, $default = null)
|
||||
{
|
||||
$c = $GLOBALS['config'];
|
||||
if ($key === null) {
|
||||
|
||||
Reference in New Issue
Block a user