mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-03-17 20:54:52 +08:00
1 line
17 KiB
JavaScript
1 line
17 KiB
JavaScript
(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{763:function(t,s,a){"use strict";a.r(s);var e=a(84),n=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"配置"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#配置"}},[t._v("#")]),t._v(" 配置")]),t._v(" "),s("p",[t._v("炸毛框架的所有配置文件都存储在 "),s("code",[t._v("config/")]),t._v(" 目录中。每个选项都带有文档,所以你可以查阅这些文件并熟悉可用的配置项。")]),t._v(" "),s("p",[t._v("一般来说,我们建议你优先查看 "),s("code",[t._v("config/global.php")]),t._v(" 文件及其文档,它包含了运行框架所需要的绝大部分配置,例如通信方式和时区等。")]),t._v(" "),s("h2",{attrs:{id:"global-php-配置说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#global-php-配置说明"}},[t._v("#")]),t._v(" global.php 配置说明")]),t._v(" "),s("p",[t._v("此处仅说明 "),s("code",[t._v("global.php")]),t._v(" 当中较为重要的 "),s("code",[t._v("driver")]),t._v(" 和 "),s("code",[t._v("servers")]),t._v(" 配置项,其他配置项请参考 "),s("code",[t._v("config/global.php")]),t._v(" 文件的注释。")]),t._v(" "),s("div",{staticClass:"language-php line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 启动框架的底层驱动(原生支持 swoole、workerman 两种) */")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'driver'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("env")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'DRIVER'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'workerman'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 要启动的服务器监听端口及协议 */")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'servers'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'host'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'0.0.0.0'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'port'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20001")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'type'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'websocket'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'host'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'0.0.0.0'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'port'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20002")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'type'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'http'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'flag'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20002")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br")])]),s("h3",{attrs:{id:"driver"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#driver"}},[t._v("#")]),t._v(" driver")]),t._v(" "),s("p",[s("code",[t._v("driver")]),t._v(" 配置项用于指定框架的底层驱动,目前支持以下驱动:")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("swoole")]),t._v(":基于 Swoole,需要安装 "),s("code",[t._v("swoole")]),t._v(" 扩展,协程支持很好")]),t._v(" "),s("li",[s("code",[t._v("workerman")]),t._v(":基于 Workerman,无需安装额外扩展,但在 PHP 8.0 下无法使用协程")]),t._v(" "),s("li",[s("code",[t._v("choir")]),t._v(":基于 Choir,尚未完成,不建议使用")])]),t._v(" "),s("h3",{attrs:{id:"servers"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#servers"}},[t._v("#")]),t._v(" servers")]),t._v(" "),s("p",[s("code",[t._v("servers")]),t._v(" 配置项用于指定框架的服务器("),s("a",{attrs:{href:"https://12.onebot.dev/connect/",target:"_blank",rel:"noopener noreferrer"}},[t._v("通信方式"),s("OutboundLink")],1),t._v(")配置,目前支持以下服务器:")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("http")]),t._v(":基础的 HTTP 服务(监听传入的 HTTP 请求)\n"),s("ul",[s("li",[s("code",[t._v("host")]),t._v(":监听地址")]),t._v(" "),s("li",[s("code",[t._v("port")]),t._v(":监听端口")]),t._v(" "),s("li",[s("code",[t._v("flags")]),t._v(":一个 int 值,用于在事件中获取源于哪一个 HTTP 监听的地址和端口")])])]),t._v(" "),s("li",[s("code",[t._v("websocket")]),t._v(":WebSocket 服务(允许其他客户端接入)\n"),s("ul",[s("li",[s("code",[t._v("host")]),t._v(":监听地址")]),t._v(" "),s("li",[s("code",[t._v("port")]),t._v(":监听端口")]),t._v(" "),s("li",[s("code",[t._v("flags")]),t._v(":同上方 HTTP 的 "),s("code",[t._v("flags")])])])])]),t._v(" "),s("p",[t._v("以上所有服务器均支持 "),s("code",[t._v("access_token")]),t._v(" 配置项,用于指定"),s("RouterLink",{attrs:{to:"/components/bot/authorization.html"}},[t._v("鉴权方式")]),t._v("。")],1),t._v(" "),s("hr"),t._v(" "),s("h2",{attrs:{id:"配置文件格式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#配置文件格式"}},[t._v("#")]),t._v(" 配置文件格式")]),t._v(" "),s("p",[t._v("除了 "),s("code",[t._v("php")]),t._v(" 文件外,我们还支持以下格式:")]),t._v(" "),s("ul",[s("li",[t._v("YAML")]),t._v(" "),s("li",[t._v("JSON")]),t._v(" "),s("li",[t._v("TOML")])]),t._v(" "),s("h2",{attrs:{id:"环境配置"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#环境配置"}},[t._v("#")]),t._v(" 环境配置")]),t._v(" "),s("p",[t._v("根据运行的环境采用不同的配置值是很有必要的,例如你可能希望在本地和生产环境中使用不同的数据库配置。")]),t._v(" "),s("p",[t._v("为了方便这一功能,我们提供了基于环境的配置加载措施。你可以在启动框架时使用 "),s("code",[t._v("--env")]),t._v("\n选项指定当前环境,例如 "),s("code",[t._v("./zhamao server --env=production")]),t._v(" 。")]),t._v(" "),s("p",[t._v("如果未明确指定当前环境,则默认环境为 "),s("code",[t._v("development")]),t._v("。")]),t._v(" "),s("p",[t._v("如果要使某一配置文件只在特定环境下记载,你可以为给文件添加后缀,例如 "),s("code",[t._v("example.production.php")]),t._v("\n只会在当前环境为 "),s("code",[t._v("production")]),t._v(" 时加载。")]),t._v(" "),s("p",[t._v("你可以同时设置基础配置文件和环境特定配置文件,例如 "),s("code",[t._v("global.php")]),t._v(" 和 "),s("code",[t._v("global.production.php")]),t._v(" ,后者将会覆盖前者中的配置项。")]),t._v(" "),s("h3",{attrs:{id:"配置安全"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#配置安全"}},[t._v("#")]),t._v(" 配置安全")]),t._v(" "),s("p",[t._v("我们"),s("strong",[t._v("非常不建议")]),t._v("你将数据库信息、访问密钥的敏感字段提交给版本控制,因为这可能会导致相关信息的泄露,同时也不利于其他开发人员修改自己的本地配置。")]),t._v(" "),s("p",[t._v("相反,我们建议你借助 DotEnv 等库,将相关配置信息写入 "),s("code",[t._v(".env")]),t._v(" 文件中,并按需读取。")]),t._v(" "),s("p",[t._v("你可以选择使用下方的环境变量来区分不同环境的配置,并提高安全性。")]),t._v(" "),s("h2",{attrs:{id:"访问配置项"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#访问配置项"}},[t._v("#")]),t._v(" 访问配置项")]),t._v(" "),s("p",[t._v("你可以在任何地方使用全局 "),s("code",[t._v("config()")]),t._v(" 函数获取配置项值。支持使用点语法获取,配置项名称由文件名开头,并允许指定默认值。")]),t._v(" "),s("div",{staticClass:"language-php line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 获取时区,未设置则返回 Asia/Shanghai")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$value")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'global.runtime.timezone'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Asia/Shanghai'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br")])]),s("p",[t._v("你也可以使用 "),s("code",[t._v("config")]),t._v(" 函数设置配置项,传递数组即可:")]),t._v(" "),s("div",{staticClass:"language-php line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 将时区修改为 UTC")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'global.runtime.timezone'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'UTC'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br")])]),s("h2",{attrs:{id:"环境变量"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#环境变量"}},[t._v("#")]),t._v(" 环境变量")]),t._v(" "),s("p",[t._v("在不同的环境中使用不同的配置是很有必要的,例如你可能希望在本地和生产环境中使用不同的数据库配置。")]),t._v(" "),s("p",[t._v("然而,你可能不希望将这些敏感信息(例如生产环境的密钥、数据库配置等)提交到版本控制中,因此我们提供了基于环境变量的配置加载措施。")]),t._v(" "),s("p",[t._v("简单来说,你可以在 "),s("code",[t._v(".env")]),t._v(" 文件中设置环境变量,然后在配置文件中使用 "),s("code",[t._v("env()")]),t._v(" 函数获取环境变量的值。")]),t._v(" "),s("p",[t._v("需要注意的是,"),s("code",[t._v(".env")]),t._v(" 文件中的所有变量均可被外部环境变量覆盖(例如系统级或 Docker 等容器环境变量)。")]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),s("p",[t._v("我们"),s("strong",[t._v("强烈不建议")]),t._v("你将 "),s("code",[t._v(".env")]),t._v(" 文件提交到版本控制中,因为这可能会导致相关信息的泄露,同时也不利于其他开发人员修改自己的本地配置。")]),t._v(" "),s("p",[t._v("我们建议你将 "),s("code",[t._v(".env")]),t._v(" 文件添加到 "),s("code",[t._v(".gitignore")]),t._v(" 中,或者使用其他方式(例如 Doppler 等服务或是 Docker 等容器)来管理环境变量。")]),t._v(" "),s("p",[t._v("你可以通过保留 "),s("code",[t._v(".env.example")]),t._v(" 文件来提供其他开发人员参考。")])]),t._v(" "),s("h3",{attrs:{id:"环境变量类型转换"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#环境变量类型转换"}},[t._v("#")]),t._v(" 环境变量类型转换")]),t._v(" "),s("p",[t._v("环境变量默认都是字符串类型,但框架内部会自动将其转换为其他类型以便使用,转换表格如下:")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("原始值")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("转换后")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[s("code",[t._v("true")])]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[s("code",[t._v("true")])])]),t._v(" "),s("tr",[s("td",[s("code",[t._v("(true)")])]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[s("code",[t._v("true")])])]),t._v(" "),s("tr",[s("td",[s("code",[t._v("false")])]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[s("code",[t._v("false")])])]),t._v(" "),s("tr",[s("td",[s("code",[t._v("(false)")])]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[s("code",[t._v("false")])])]),t._v(" "),s("tr",[s("td",[s("code",[t._v("null")])]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[s("code",[t._v("null")])])]),t._v(" "),s("tr",[s("td",[s("code",[t._v("(null)")])]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[s("code",[t._v("null")])])]),t._v(" "),s("tr",[s("td",[s("code",[t._v("empty")])]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[s("code",[t._v("''")])])])])])])}),[],!1,null,null,null);s.default=n.exports}}]); |