2: 配置

data/app.json 描述了构建:加载了哪些资源,发布输出的位置,以及哪些资源仅属于发布或仅属于开发。

2.1: 最小配置

资源指的是 Phlo 运行时目录。这是框架代码,而不是应用特定文件的地方。您在应用路径中以 .phlo 编写应用代码;只有通用的运行时功能才故意属于目录。

2.2: Resources

Commonly used resources:

Resource Purpose
security/creds Credentials from env and ini files
security/security Security headers
security/token Token generation
payload Read POST, PUT, PATCH and uploads
session Session object
cookies Cookie object
DOM/form Async forms
DOM/link Async link navigation (<a.async>)
phlo.async Backendhelper phlo_async() voor CLI-calls via de daemonpool of een eenmalig subprocess
visitors Heartbeat/visitor tracking
useragent User-agent parsing
DB/DB, DB/MySQL, DB/model Database and ORM

Only use resources the app actually needs. The Phlo Control Center can show available resources and dependencies.

Do not confuse the two async layers. SPA navigation and async forms run through the frontend runtime generated in www/app.js, with resources such as DOM/link and DOM/form. The separate phlo.async resource provides the backend function phlo_async() for dispatching a PHP/CLI call outside the current request.

To configure a resource for one app without forking it, inject a value onto its node from app.phlo (prop %AI.model = 'claude-opus-4-8', static %model.DB => %MySQL). See Advanced, "Modifying resources without forking".

2.3: 开发排除

在本地开发构建中,您通常希望省略某些跟踪和实时资源:

{
    "exclude": [
        "visitors",
        "useragent",
        "wsCast"
    ]
}

这适用于开发构建。发布构建不会自动使用此排除;因此,访客跟踪仍然可以在此处处于活动状态。

2.4: Release

简写就足够了:

{
    "release": "%app/release/"
}

Phlo 然后将 release PHP 写入 release/,并将 web 资产写入 release/www/

2.5: 路径

%app/ 指的是来自 phlo_app(...) 的应用路径。尽可能将路径配置保留在 www/app.phprelease/www/app.php 中,以便 data/app.json 保持关于构建行为的信息。

2.6: 命名空间和捆绑包

每个 <style><script> 块都会转译成每个命名空间的捆绑包。ns=docs 会生成 www/docs.csswww/docs.jsns=app,docs 会出现在两个捆绑包中,而没有 ns= 的块则在默认命名空间中。一个页面通过 view(..., ns: 'docs') 选择其捆绑包。

data/app.json 中的三个键控制这一点:

{
    "defaultNS": "app,docs",
    "phloNS": ["app", "docs"],
    "iconNS": "app"
}

有两个规则可以保持多命名空间应用程序的健康:

  1. 永远不要通过将defer: '/app.js'传递给view()来解决缺失的运行时。在异步导航中,这会将包重新注入到已经有一个的页面中,并因重复声明而崩溃。请配置phloNS
  2. 两个运行时绝不能在一个页面中相遇。跨命名空间的链接(一个app页面链接到一个docs页面)必须是普通链接,以便浏览器进行完整的页面加载。只有同一命名空间内的链接才会获得class=async以进行SPA导航。

2.7: 生成的输出

请勿手动编辑这些文件:

php/
www/app.js
www/app.css
release/

更改 .phlo 源代码(任何开发请求都会重建它;build::run 从 CLI 也会执行相同操作),使用 build::lint 进行检查,然后使用 build::release 创建一个发布版本。

2.8: 凭证

security/creds 资源解析秘密(API 密钥、数据库登录、Webhook 令牌),并将它们暴露为 %creds->...。它从两个来源读取,因此相同的代码可以在笔记本电脑和生产环境中无须编辑地运行。

INI 文件 data/creds.ini 是最简单的来源。请将其排除在版本控制之外。简单的秘密是顶级键;结构化的秘密是带有子键的部分:

OpenAI = sk-...
Claude = sk-ant-...
Grok = xai-...

[mysql]
host = 127.0.0.1
database = app
user = app
password = secret

您可以将它们读取为 %creds->OpenAI(标量)和 %creds->mysql->host(嵌套)。

环境变量提供相同的值而无需文件,这适合 CI 和容器。前缀 PHLO__ 标记凭证,__ 用于分隔嵌套级别:

PHLO__OpenAI=sk-...
PHLO__mysql__host=127.0.0.1

一个主机作用域的表单,PHLO_<HOST>__...,仅适用于匹配的主机。<HOST> 是请求主机的大写形式,所有非字母数字字符都被替换为 _,因此 factuur.software 变为 FACTUUR_SOFTWARE

PHLO_FACTUUR_SOFTWARE__OpenAI=sk-...

源按顺序合并,每个源覆盖前一个源:首先是 data/creds.ini,然后是 PHLO__ 全局变量,最后是主机范围的 PHLO_<HOST>__。因此,主机范围的变量优先于全局变量,而全局变量又优先于 ini 文件。

资源通过 @ requires: creds:<name> 声明其所需内容(例如 creds:OpenAIcreds:mysql)。该行是信息性的:它记录了键,但并不创建它。值被存储为敏感信息,因此 %creds 在调试输出中会对其进行掩码处理。

最近更新于 2026年8月23日

我们使用必要的cookie来使该网站正常工作。在您的许可下,我们还使用分析工具来改善网站。