SuperAPI AI 工具集

valinor-php

编程与开发

查看项目

更新于 10-15 08:12

技能介绍

用途

Valinor PHP 技能用于编写和修复基于 cuyz/valinor 库的 PHP 代码。它面向 Valinor 的公共 API,帮助开发者产出生产级质量的代码,并倾向于使用最小且正确的 Valinor 配置,将代码保持在公共接口层面。

核心立场

  • 默认采用严格映射,仅在输入契约确实需要时才放宽规则。
  • 优先使用精确的 PHP 与 PHPDoc 类型,而非 mixed 或 object。
  • 优先使用公共入口点,例如 MapperBuilder、NormalizerBuilder、Mapper\Source\Source、Normalizer\Format、HttpRequest、AsConverter、AsTransformer 和 Object\Constructor。
  • 将构建器视为不可变的配置对象:通过链式调用或重新赋值使用,不要假设会原地修改。
  • 对于共享的应用策略,优先使用可复用的配置器。
  • 避免使用 Library、Compiler、Definition 等区域下的内部类或具体映射器内部实现。

按需阅读参考

技能提供按任务查阅的参考文件:

  • 通用映射、构建器设置、缓存、公共 API:references/api-surface.md
  • 选择精确类型与签名:references/type-signatures.md
  • JSON/YAML/文件源、路径映射、自定义可迭代源:references/source-shaping.md
  • 转换器、键重映射、构造器、接口推断、自定义错误:references/customization.md
  • HTTP 请求映射、PSR-7 集成、源绑定属性:references/http-request-mapping.md
  • 数组或 JSON 规范化与转换器:references/normalization.md
  • 格式化、翻译与重映射验证消息:references/error-messages-formatting.md
  • 静态分析插件、纯度、框架集成与升级说明:references/static-analysis-and-integration.md
  • 根据用户请求选择实现模式:references/common-use-cases.md
  • 调试映射失败或异常行为:references/troubleshooting-workarounds.md

示例片段包括:examples/happy-path.md、examples/http-requests.md、examples/error-formatting.md、examples/production-safe.md、examples/anti-patterns.md。

工作流程

  1. 识别边界:对象映射、可调用参数、HTTP 请求映射、规范化或自定义。
  2. 加载与任务匹配的一到两个参考文件。
  3. 使用最窄的正确目标类型。
  4. 从严格默认值开始;仅在输入契约有正当理由时添加 allowScalarValueCasting() 或 allowSuperfluousKeys() 等开关。
  5. 在预期会出现无效外部输入的应用边界处捕获 CuyZ\Valinor\Mapper\MappingError。
  6. 如果同一 Valinor 策略会被复用,将其提取为构建器配置器,而不是重复链式调用。
  7. 如果代码面向生产,在适当情况下添加缓存使用。

首选默认值

  • 对于 JSON、YAML 和文件,优先使用 Mapper\Source\Source::json()、Source::yaml() 和 Source::file()。
  • 对于新代码,优先使用提供的键大小写配置器,而非已弃用的源修饰符如 Source::camelCaseKeys()。
  • 当重塑入站负载时,Source::map() 路径映射仍然有效;仅在新代码中避免已弃用的键大小写源修饰符。
  • 当专用 DTO 不必要时,使用直接类型签名,如 'list<Foo>' 或 'array{status: non-empty-string, page?: positive-int}'。
  • 当结构会被复用、承载领域含义或值得构造器验证时,使用 DTO 或值对象。
  • 当具体实现取决于输入数据时,使用 infer() 处理接口或抽象类多态。
  • 当对象创建不是简单的构造器映射问题时,使用 registerConstructor() 或 #[Object\Constructor]。
  • 使用 registerConverter() 进行输入值转换,使用 registerTransformer() 进行输出规范化。
  • 对于 HTTP 请求映射,记住路由和查询参数已支持标量转换,无需启用全局 allowScalarValueCasting()。

硬性规则

  • 不要为应用代码推荐 Valinor 内部类。
  • 不要为了让映射通过而静默放宽类型。
  • 不要在没有明确理由的情况下全局启用宽松行为。
  • 不要忘记自定义构造器、转换器、转换器和推断回调必须保持纯净且确定性。

交付检查清单

完成前,确保代码:

  • 仅使用公共 Valinor API。
  • 使用边界所需的精确类型签名。
  • 对任何非默认的灵活性设置,用输入契约解释原因。
  • 在可能出现无效外部输入的地方处理 MappingError。
  • 避免已弃用模式,除非是在维护现有代码。

该技能是自包含的,在运行时应当足够使用。