survos / liform-bundle
Liform 包:将 Symfony 表单转换为 Json Schema
Requires
- answea/liform: ^1.5
- symfony/config: ^6.4 || ^7.0
- symfony/dependency-injection: ^6.4 || ^7.0
- symfony/http-kernel: ^6.4 || ^7.0
Requires (Dev)
- phpstan/phpstan: ^1.8
- dev-main
- 1.5.340
- 1.5.339
- 1.5.338
- 1.5.337
- 1.5.336
- 1.5.335
- 1.5.334
- 1.5.333
- 1.5.332
- 1.5.331
- 1.5.330
- 1.5.329
- 1.5.328
- 1.5.327
- 1.5.326
- 1.5.325
- 1.5.324
- 1.5.323
- 1.5.322
- 1.5.321
- 1.5.320
- 1.5.319
- 1.5.318
- 1.5.317
- 1.5.316
- 1.5.315
- 1.5.314
- 1.5.313
- 1.5.312
- 1.5.311
- 1.5.310
- 1.5.309
- 1.5.308
- 1.5.307
- 1.5.306
- 1.5.305
- 1.5.304
- 1.5.303
- 1.5.302
- 1.5.301
- 1.5.300
- 1.5.299
- 1.5.298
- 1.5.297
- 1.5.296
- 1.5.295
- 1.5.294
- 1.5.293
- 1.5.292
- 1.5.291
- 1.5.290
- 1.5.289
- 1.5.288
- 1.5.287
- 1.5.286
- 1.5.285
- 1.5.284
- 1.5.283
- 1.5.282
- 1.5.281
- 1.5.280
- 1.5.279
- 1.5.278
- 1.5.277
- 1.5.276
- 1.5.275
- 1.5.274
- 1.5.273
- 1.5.272
- 1.5.271
- 1.5.270
- 1.5.269
- 1.5.268
- 1.5.267
- 1.5.266
- 1.5.265
- 1.5.264
- 1.5.263
- 1.5.262
- 1.5.261
- 1.5.260
- 1.5.259
- 1.5.258
- 1.5.257
- 1.5.256
- 1.5.255
- 1.5.254
- 1.5.253
- 1.5.252
- 1.5.251
- 1.5.250
- 1.5.249
- 1.5.248
- 1.5.247
- 1.5.246
- 1.5.245
- 1.5.244
- 1.5.243
- 1.5.242
- 1.5.241
- 1.5.240
- 1.5.239
- 1.5.238
- 1.5.237
- 1.5.236
- 1.5.235
- 1.5.234
- 1.5.233
- 1.5.232
- 1.5.231
- 1.5.230
- 1.5.229
- 1.5.228
- 1.5.227
- 1.5.226
- 1.5.225
- 1.5.224
- 1.5.223
- 1.5.222
- 1.5.221
- 1.5.220
- 1.5.219
- 1.5.218
- 1.5.217
- 1.5.216
- 1.5.215
- 1.5.214
- 1.5.213
- 1.5.212
- 1.5.211
- 1.5.210
- 1.5.209
- 1.5.208
- 1.5.207
- 1.5.206
- 1.5.205
- 1.5.204
- 1.5.203
- 1.5.202
- 1.5.201
- 1.5.200
- 1.5.199
- 1.5.198
- 1.5.197
- 1.5.196
- 1.5.195
- 1.5.194
- 1.5.193
- 1.5.192
- 1.5.191
- 1.5.190
- 1.5.189
- 1.5.188
- 1.5.187
- 1.5.186
- 1.5.185
- 1.5.184
- 1.5.183
- 1.5.182
- 1.5.181
- 1.5.180
- 1.5.179
- 1.5.178
- 1.5.177
- 1.5.176
- 1.5.175
- 1.5.174
- 1.5.173
- 1.5.172
- 1.5.171
- 1.5.170
- 1.5.169
- 1.5.168
- 1.5.167
- 1.5.166
- 1.5.165
- 1.5.164
- 1.5.163
- 1.5.162
- 1.5.161
- 1.5.160
- 1.5.159
- 1.5.158
- 1.5.157
- 1.5.156
- 1.5.155
- 1.5.154
- 1.5.153
- 1.5.152
- 1.5.151
- 1.5.150
- 1.5.149
- 1.5.148
- 1.5.147
- 1.5.146
- 1.5.145
- 1.5.144
- 1.5.143
- 1.5.142
- 1.5.141
- 1.5.140
- 1.5.139
- 1.5.138
- 1.5.137
- 1.5.136
- 1.5.135
- 1.5.134
- 1.5.133
- 1.5.132
- 1.5.131
- 1.5.130
- 1.5.129
- 1.5.128
- 1.5.127
- 1.5.126
- 1.5.125
- 1.5.124
- 1.5.123
- 1.5.122
- 1.5.121
- 1.5.120
- 1.5.119
- 1.5.118
- 1.5.117
- 1.5.116
- 1.5.115
- 1.5.114
- 1.5.113
- 1.5.112
- 1.5.111
- 1.5.110
- 1.5.109
- 1.5.108
- 1.5.107
- 1.5.106
- 1.5.105
- 1.5.104
- 1.5.103
- 1.5.102
- 1.5.101
- 1.5.100
- 1.5.99
- 1.5.98
- 1.5.97
- 1.5.96
- 1.5.95
- 1.5.94
- 1.5.93
- 1.5.92
- 1.5.91
- 1.5.90
- 1.5.89
- 1.5.88
- 1.5.87
- 1.5.86
- 1.5.85
- 1.5.84
- 1.5.83
- 1.5.82
- 1.5.81
- 1.5.80
- 1.5.79
- 1.5.78
- 1.5.77
- 1.5.76
- 1.5.75
- 1.5.74
- 1.5.73
- 1.5.72
- 1.5.71
- 1.5.70
- 1.5.69
- 1.5.68
- 1.5.67
- 1.5.66
- 1.5.65
- 1.5.64
- 1.5.63
- 1.5.62
- 1.5.61
- 1.5.60
- 1.5.59
- 1.5.58
- 1.5.57
- 1.5.56
- 1.5.55
- 1.5.54
- 1.5.53
- 1.5.52
- 1.5.51
- 1.5.50
- 1.5.49
- 1.5.48
- 1.5.47
- 1.5.46
- 1.5.45
- 1.5.44
- 1.5.43
- 1.5.42
- 1.5.41
- 1.5.40
- 1.5.39
- 1.5.38
- 1.5.37
- 1.5.36
- 1.5.35
- 1.5.34
- 1.5.33
- 1.5.32
- 1.5.31
- 1.5.30
- 1.5.29
- 1.5.28
- 1.5.27
- 1.5.26
- 1.5.25
- 1.5.24
- 1.5.23
- 1.5.22
- 1.5.21
- 1.5.20
- 1.5.19
- 1.5.18
- 1.5.17
- 1.5.16
- 1.5.15
- 1.5.14
- 1.5.13
- 1.5.12
- 1.5.11
- 1.5.10
- 1.5.9
- 1.5.8
- 1.5.7
- 1.5.6
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.103
- 1.4.102
- 1.4.101
- 1.4.100
- 1.4.99
- 1.4.98
- 1.4.97
- 1.4.96
- 1.4.95
- 1.4.94
- 1.4.93
- 1.4.92
- 1.4.91
- 1.4.90
- 1.4.89
- 1.4.88
- 1.4.87
- 1.4.86
- 1.4.85
- 1.4.84
- 1.4.83
- 1.4.82
- 1.4.81
- 1.4.80
- 1.4.79
- 1.4.78
- 1.4.77
- 1.4.76
- 1.4.75
- 1.4.74
- 1.4.73
- 1.4.72
- 1.4.71
- 1.4.70
- 1.4.69
- 1.4.68
- 1.4.67
- 1.4.66
- 1.4.65
- 1.4.64
- 1.4.63
- 1.4.62
- 1.4.61
- 1.4.60
- 1.4.59
- 1.4.58
- 1.4.57
- 1.4.56
- 1.4.55
- 1.4.54
- 1.4.53
- 1.4.52
- 1.4.51
- 1.4.50
- 1.4.49
- 1.4.48
- 1.4.44
- 1.4.43
- 1.4.42
- 1.4.41
- 1.4.40
- 1.4.39
This package is auto-updated.
Last update: 2024-09-24 13:45:09 UTC
README
将 Liform 集成到 Symfony 中的包。Liform 是一个将 Symfony 表单序列化为 JSON schema 的库。适用于 liform-react 或 json-editor,或任何基于 json-schema 的其他表单生成器。
维护与客户端技术(如 JavaScript)中的表单匹配的 Symfony 表单非常麻烦。维护此类表单的文档也很麻烦。而且容易出错。
LiformBundle 生成 JSON schema 表示,用作文档,可用于验证您的数据,如果需要,还可以用于生成表单。
安装
首先,请注意,在 Limenius/symfony-react-sandbox 中有一个包含此包示例实现的完整示例,包括 React、Webpack 和 Symfony 标准版,供您使用。
您可以自由地克隆它、运行它、实验,并将您需要的部分复制到项目中。因为这个包主要关注前端,您需要有一个兼容的前端设置。
安装包
打开控制台,导航到您的项目目录,并执行以下命令以下载此包的最新稳定版本
composer require limenius/liform-bundle
此命令需要您全局安装了 Composer,如 Composer 文档中的 安装章节 所述。
用法
将表单序列化为 JSON Schema
$form = $this->createForm(CarType::class, $car, ['csrf_protection' => false]); $schema = json_encode($this->get('liform')->transform($form));
并且 $schema
将包含一个 JSON Schema 表示,例如
{ "title":null, "properties":{ "name":{ "type":"string", "title":"Name", "propertyOrder":1 }, "color":{ "type":"string", "title":"Color", "attr":{ "placeholder":"444444" }, "default":"444444", "description":"3 hexadecimal digits", "propertyOrder":2 }, "drivers":{ "type":"array", "title":"hola", "items":{ "title":"Drivers", "properties":{ "firstName":{ "type":"string", "propertyOrder":1 }, "familyName":{ "type":"string", "propertyOrder":2 } }, "required":[ "firstName", "familyName" ], "type":"object" }, "propertyOrder":3 } }, "required":[ "name", "drivers" ] }
提取到 JSON-schema 的信息
Liform 的目标是尽可能从表单中提取数据,以便在 schema 中有完整的表示,包括验证和 UI 提示。目前支持以下选项。
请参阅 Liform 文档 了解更多详细信息。
使用自己的转换器
Liform 通过递归检查表单,为每个子项找到(解析)正确的转换器,并使用该转换器构建相应的 json-schema 部分。因此,如果您想修改特定表单类型转换的方式,您可以添加一个转换器,并配置它应用于所有具有特定 block_prefix
的子项。
为此,您应该创建一个新的服务定义,并添加 liform.transformer
标签。您需要通过将标签的 form_type
属性设置为相应的 block_prefix
来指定您的转换器将应用于哪些表单类型。
在以下示例中,我们重用了 StringTransformer 类。通过指定标签的 widget
属性,我们可以将转换器限制为仅适用于具有该特定小部件的类型。
services: app.liform.file_type.transformer: class: "%liform.transformer.string.class%" parent: Limenius\Liform\Transformer\AbstractTransformer tags: - { name: liform.transformer, form_type: file, widget: file_widget }
当然,您可以自己使用Transformer类,只需确保在实现时实现所需的Limenius\Liform\Transformer\TransformerInterface
。
扩展默认行为
除了添加自定义的Transformer来自定义特定表单类型的序列化之外,Liform还允许您添加扩展来自定义所有类型的默认行为。
以下示例中,我们使用扩展添加了一个submit_url
属性,该属性表示表单的action
参数。
<?php use Limenius\Liform\Transformer\ExtensionInterface; use Symfony\Component\Form\FormInterface; class FormDataExtension implements ExtensionInterface { /** * @param FormInterface $form * @param array $schema * * @return array */ public function apply(FormInterface $form, array $schema) { if (!$form->isRoot()) { return $schema; } if (!$form->getConfig()->hasOption('action')) { return $schema; } $schema['submit_url'] = $form->getConfig()->getOption('action'); return $schema; } }
确保您的扩展类实现了所需的Limenius\Liform\Transformer\ExtensionInterface
。要注册您的扩展,创建一个新的服务定义并将其添加到liform.extension
标签中。
services: app.liform.form_data.extension: class: MyProject\Application\Liform\FormDataExtension tags: - { name: liform.extension }
序列化初始值
此包注册了一个标准化器,将FormView
类序列化为一个与您的json-schema匹配的初始值数组。以下示例展示了如何在控制器操作中使用此功能。
$serializer = $this->get('serializer'); $initialValues = $serializer->normalize($form);
序列化错误
此包注册了一个标准化器,将带有错误的表单序列化到一个数组中。这部分未经许可直接取自FOSRestBundle。复制以下语句以使用此功能。
$serializer = $this->get('serializer'); $errors = $serializer->normalize($form);
包含标准化表单错误的数组的格式与liform-react包兼容。
许可证
此包在MIT许可证下发布。有关完整的版权和许可信息,请查看与源代码一起分发的LICENSE文件。
LICENSE.md
致谢
使用解析器和减少器转换表单的技术灵感来源于Symfony Console Form。