可以在 Symfony 表单中为映射实体 fields/properties 提供自定义名称吗?
Possible to provide custom names for mapped entity fields/properties in a Symfony form?
我正在与 Symfony 3.4
合作。假设有一个具有某些属性的实体 Task
,例如title
、note
等
在创建自定义 FormType 让用户创建新的 Task
实体时,每个实体 属性 通常使用其内部名称添加:
class TaskType extends AbstractMoneyControlBaseType {
public function getBlockPrefix() {
return 'app_task';
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('title', TextType::class, [
'label' => 'The Title'
])
->add('note', TextType::class, [
'label' => 'A Note'
]);
...
}
}
这将呈现名称为 app_task[title]
和 app_task[note]
的表单字段。是否可以改用自定义名称?
当然,Symfony 使用识别属性并将输入映射到实体。但是,通过将字段映射到不同的名称来指定不同的名称应该不难,反之亦然通过将字段名称映射到实体 属性.
像这样:
$builder
->add('title', TextType::class, [
'label' => 'The Title',
'renderedName' => 'customTitleName',
])
->add('note', TextType::class, [
'label' => 'A Note'
'renderedName' => 'customNoteName',
]);
OR
$builder
->add('customTitleName', TextType::class, [
'label' => 'The Title',
'mappedFieldName' => 'title',
])
->add('customNoteName', TextType::class, [
'label' => 'A Note'
'mappedFieldName' => 'note',
]);
我找不到这样的解决方案。那么,是否可以使用自定义字段名称?
可能的解决方案是使用 property-path
$builder
->add('customTitleName', TextType::class, [
'label' => 'The Title',
'property_path' => 'title',
'renderedName' => 'customTitleName',
])
->add('note', TextType::class, [
'label' => 'A Note'
'renderedName' => 'customNoteName',
]);
我正在与 Symfony 3.4
合作。假设有一个具有某些属性的实体 Task
,例如title
、note
等
在创建自定义 FormType 让用户创建新的 Task
实体时,每个实体 属性 通常使用其内部名称添加:
class TaskType extends AbstractMoneyControlBaseType {
public function getBlockPrefix() {
return 'app_task';
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('title', TextType::class, [
'label' => 'The Title'
])
->add('note', TextType::class, [
'label' => 'A Note'
]);
...
}
}
这将呈现名称为 app_task[title]
和 app_task[note]
的表单字段。是否可以改用自定义名称?
当然,Symfony 使用识别属性并将输入映射到实体。但是,通过将字段映射到不同的名称来指定不同的名称应该不难,反之亦然通过将字段名称映射到实体 属性.
像这样:
$builder
->add('title', TextType::class, [
'label' => 'The Title',
'renderedName' => 'customTitleName',
])
->add('note', TextType::class, [
'label' => 'A Note'
'renderedName' => 'customNoteName',
]);
OR
$builder
->add('customTitleName', TextType::class, [
'label' => 'The Title',
'mappedFieldName' => 'title',
])
->add('customNoteName', TextType::class, [
'label' => 'A Note'
'mappedFieldName' => 'note',
]);
我找不到这样的解决方案。那么,是否可以使用自定义字段名称?
可能的解决方案是使用 property-path
$builder
->add('customTitleName', TextType::class, [
'label' => 'The Title',
'property_path' => 'title',
'renderedName' => 'customTitleName',
])
->add('note', TextType::class, [
'label' => 'A Note'
'renderedName' => 'customNoteName',
]);