将模型转换器添加到自定义表单类型(仅父级)

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 上的所有示例都显示自定义复合表单类型,其中的名称是预先知道的。

addModelTransformerFormBuilderInterface的一个方法。在您的自定义类型中,它应该在 $builder 上调用,而不是在 $this(自定义类型本身)上调用。