将模型转换器添加到自定义表单类型(仅父级)
add model transformer to custom form type (only parent)
我正在构建我的特殊选择类型。
class MyType extends AbstractType {
public function getParent() { return ChoiceType::class; }
public function buildForm(FormBuilderInterface $builder, array $options) {
$this->addModelTransformer(new CallbackTransformer(); // <-- impossible
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setRequired('currentDataCategory');
//....
}
}
问题是我不想在 buildForm
中添加 FormField,因为那样我就必须知道字段的名称。我只想定义我的特殊 ChoiceType。
并且我需要添加一个 ModelTransformer。如果我确实添加了一个字段,那就很容易了:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('unkonwnname', ChoiceType::class);
$builder->get('unkonwnname')->addModelTransformer(new CallbackTransformer(); // <-- should work
}
所以我想我缺少对自定义表单类型的一般理解。 Web 上的所有示例都显示自定义复合表单类型,其中的名称是预先知道的。
addModelTransformer
是FormBuilderInterface
的一个方法。在您的自定义类型中,它应该在 $builder
上调用,而不是在 $this
(自定义类型本身)上调用。
我正在构建我的特殊选择类型。
class MyType extends AbstractType {
public function getParent() { return ChoiceType::class; }
public function buildForm(FormBuilderInterface $builder, array $options) {
$this->addModelTransformer(new CallbackTransformer(); // <-- impossible
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setRequired('currentDataCategory');
//....
}
}
问题是我不想在 buildForm
中添加 FormField,因为那样我就必须知道字段的名称。我只想定义我的特殊 ChoiceType。
并且我需要添加一个 ModelTransformer。如果我确实添加了一个字段,那就很容易了:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('unkonwnname', ChoiceType::class);
$builder->get('unkonwnname')->addModelTransformer(new CallbackTransformer(); // <-- should work
}
所以我想我缺少对自定义表单类型的一般理解。 Web 上的所有示例都显示自定义复合表单类型,其中的名称是预先知道的。
addModelTransformer
是FormBuilderInterface
的一个方法。在您的自定义类型中,它应该在 $builder
上调用,而不是在 $this
(自定义类型本身)上调用。