Centralize Input/Output and Data Class Logic in Metadata
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 45/100
- Issue 类型
- 重构
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
- 技术栈
- php
调研方向
首先,将 ObjectMapperProvider、SerializerContextBuilder 和 OpenApiFactory 中的回退逻辑与 Metadata、Operation 和 ApiResource 类进行比较。确定应如何集中处理输入、输出和可选数据类的行为,然后验证受影响的使用方是否使用一致的回退,并确认兼容性或发布决策已记录在案。
由索引模型根据 Issue 内容生成。
描述
Currently, across the codebase (e.g., in ObjectMapperProvider, SerializerContextBuilder, OpenApiFactory), we frequently encounter the pattern of checking for a custom input/output class and falling back to the resource class if not defined:
$class = $operation->getInput()['class'] ?? $operation->getClass();
// or
$class = $operation->getOutput()['class'] ?? $operation->getClass();
To simplify the codebase and avoid repetitive logic, I propose introducing helper methods directly in the Metadata (and thus Operation and ApiResource) classes to handle these fallbacks.
Proposed Changes
The idea is to add the following methods:
getInputClass(): ?string: Returns the custom input class if defined, otherwise falls back togetClass().getOutputClass(): ?string: Returns the custom output class if defined, otherwise falls back togetClass().getDataClass(): ?string: (Optional/For discussion) A method to handle the mapped entity class with a similar fallback mechanism, specifically useful when working with DTOs and Data Mappers.
Benefits
- Dry Code: Centralizes the logic in one place.
- Simplification: Reduces boilerplate in providers, processors, and factories.
- Consistency: Ensures the fallback logic is applied identically everywhere.
Considerations
This changes metadata handling significantly. Cleaner API, but assess whether it requires a major (breaking) release or can remain optional.
- 主要语言
- PHP
- 星标
- 2.6k
- 派生
- 984
- 平均合并
- 1 天 17 小时
- 30 天内合并 PR
- 84
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
api-platform/core 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 68/100
api-platform/core#8475 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 38/100
api-platform/core#8591 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 48/100
api-platform/core#8535 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 3/5 1-2 天 新手友好度 58/100
api-platform/core#8499 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 48/100
api-platform/core#8494 ·
维护者通常 1 天内回复
查看 api-platform/core 的全部 Issue
相似的 Issue
-
难度 1/5 1 小时以内 新手友好度 88/100
-
sync-en
难度 2/5 1-3 小时 新手友好度 74/100
维护者通常 1 天内回复
-
sync-en
难度 2/5 1-3 小时 新手友好度 76/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 88/100
Yoast/wordpress-seo#23658 ·
维护者通常 3 天内回复
-
fixed
难度 2/5 1-3 小时 新手友好度 78/100
firefly-iii/firefly-iii#12934 · 2 条评论 ·
维护者通常 1 天内回复