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 自定义属性,而不是让样式表里散落硬编码的颜色。这样后端配置一改,前后端的视觉一起变。

得到的收益

开新站从"半天全局替换"变成"改一份配置 + 执行一次初始化脚本",而且不会再出现"某个角落还留着旧域名"这种情况。这类重构本身不产生新功能,但它决定了后面开新站的边际成本。