PHP 8 下把品牌信息抽成一层配置
同一套代码部署到多个域名,早期把站点名、域名白名单、示例链接全部硬编码在模板里,每开一个新站都要做一次全局替换。这篇记录抽配置层的过程和判断标准。
最初的代码里,站点名称直接写在模板的 <title> 和页头里,回调域名、白名单、示例链接散落在各个业务文件里。开第二、第三个站的时候,流程变成"复制一份代码 — 全局搜索替换 — 逐个手工确认",一次要花掉大半天,而且总会漏掉几处。
哪些东西该进配置层
判断标准很简单:如果一个值在换一个部署实例时需要变,它就应该在配置里。按这个标准梳理下来有四类:
- 展示类:站点名称、副标题、Logo 路径、主色调。
- 身份类:主域名、允许的回调域名与白名单、Cookie 作用域。
- 内容类:示例链接、预置文案、帮助文档地址。
- 能力类:各功能开关、外部服务地址。
落地方式
配置用一个纯数组文件返回,模板只读这个数组,业务代码只通过一个取值函数访问,不允许直接读全局变量。这样后续要把配置换成数据库或环境变量,改动面被限制在一个文件里。
// config/site.php
return [
'name' => '小云小站',
'base_url' => 'https://example.com',
'theme' => ['accent' => '#0e7490'],
'trusted' => ['example.com'],
];
// 取值入口,业务侧只依赖它
function site(string , mixed = null): mixed
{
static = null;
??= require __DIR__ . '/../config/site.php';
return ?? ;
}前端这一侧的对应做法是把主色调之类的值渲染进 CSS 自定义属性,而不是让样式表里散落硬编码的颜色。这样后端配置一改,前后端的视觉一起变。
得到的收益
开新站从"半天全局替换"变成"改一份配置 + 执行一次初始化脚本",而且不会再出现"某个角落还留着旧域名"这种情况。这类重构本身不产生新功能,但它决定了后面开新站的边际成本。