dandoetech/bff-metadata
Composer 安装命令:
composer require dandoetech/bff-metadata
包简介
Framework-agnostic BFF UI metadata core: derive frontend-ready Resource UI metadata from a central Resource Registry with override support.
README 文档
README
Pre-release — Architecture by senior tech lead, implementation largely AI-assisted with human review. Not fully reviewed. Architecture may change before v1.0.0.
Generate frontend-ready UI metadata from a Resource Registry. Derives table columns, form layouts, field widgets, and action buttons — consistently across resources, with per-project overrides. Framework-agnostic.
Installation
composer require dandoetech/bff-metadata
Requires dandoetech/resource-registry.
Quick Start
use DanDoeTech\BffMetadata\Builders\DefaultMetadataBuilder; // $resource is any ResourceDefinitionInterface (from registry or built manually) $builder = new DefaultMetadataBuilder(); $metadata = $builder->forResource($resource); echo json_encode($metadata->toArray(), JSON_PRETTY_PRINT);
Output:
{
"key": "product",
"label": "Product",
"fields": {
"name": { "name": "name", "widget": "text", "required": true },
"price": { "name": "price", "widget": "number", "required": true, "props": { "step": 0.01 } },
"category": { "name": "category", "widget": "relation", "props": { "targetResource": "category", "multiple": false } },
"category_name": { "name": "category_name", "widget": "text", "readOnly": true }
},
"table": {
"columns": ["name", "price", "category", "category_name"],
"defaultSort": "-created_at",
"density": "comfortable"
},
"create": { "layout": [["name", "price"], ["category"]] },
"update": { "layout": [["name", "price"], ["category"]] },
"actions": [
{ "name": "create", "kind": "primary" },
{ "name": "delete", "kind": "danger", "confirm": true }
]
}
Applying Overrides
Customize the generated metadata without modifying the resource definition:
use DanDoeTech\BffMetadata\Builders\OverrideApplier; $overrides = [ 'fields' => [ 'price' => ['label' => 'Price (EUR)', 'props' => ['step' => 0.5]], ], 'table' => ['columns' => ['name', 'price'], 'defaultSort' => '-price'], ]; $final = (new OverrideApplier())->apply($metadata, $overrides);
Laravel users: Use
dandoetech/laravel-bfffor REST endpoints, policy-based visibility, and caching decorators.
API Overview
Core
| Class | Purpose |
|---|---|
DefaultMetadataBuilder |
Implements MetadataProviderInterface — generates metadata from a resource definition |
OverrideApplier |
Applies per-project tweaks onto generated metadata |
I18nResolver |
Optional translation hook for labels and help text |
Metadata Value Objects
| Class | Contents |
|---|---|
ResourceUiMetadata |
Top-level container — fields, table, forms, actions, extensions. Has toArray() |
FieldUiMetadata |
Widget type, label, help, required, readOnly, props, options, order, width |
TableMetadata |
Column list, defaultSort, density |
FormMetadata |
2D layout grid (field names per row), submitOnEnter |
ActionUiMetadata |
Name, label, kind (primary/default/danger), confirm flag |
Contract
interface MetadataProviderInterface { public function forResource(ResourceDefinitionInterface $resource): ResourceUiMetadata; }
Implement this for decorators (policy filtering, caching, logging).
Widget Mapping
| FieldType | Widget |
|---|---|
String |
text |
Integer |
number |
Float |
number (props: step: 0.01) |
Boolean |
checkbox |
DateTime |
date |
Json |
json |
| Relations | relation (props: targetResource, multiple) |
Computed Fields
Computed fields from the registry are included as read-only fields in the table but excluded from form layouts, since they are derived values.
I18n
Pass a translator callable to resolve labels and help text:
$i18n = new I18nResolver(fn (string $key) => $translations[$key] ?? null); $builder = new DefaultMetadataBuilder(i18n: $i18n);
Translation keys follow the pattern resource.{key}.label, field.{key}.{name}.label, action.{key}.{name}.
Testing
composer install composer test # PHPUnit composer qa # cs:check + phpstan + test
License
MIT
dandoetech/bff-metadata 适用场景与选型建议
dandoetech/bff-metadata 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 0 次下载、GitHub Stars 达 1, 最近一次更新时间为 2026 年 03 月 15 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「metadata」 「ui」 「frontend」 「SPA」 「bff」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 dandoetech/bff-metadata 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 dandoetech/bff-metadata 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 dandoetech/bff-metadata 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Query filtering in your frontend
Article CSS-ID Frontend Output Optimization
Frontend support for the MultiColumnWizard
Yii2 Component to manage SEO data and metadata
Extremely simple meta tag generator.
Add a service icon link as a contao content element.
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 29
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-03-15