zhamao-framework/assets/js/52.fe63ad16.js
2024-09-19 08:29:13 +00:00

1 line
17 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(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}}]);