gpt4 book ai didi

Symfony FormType getParent与继承

转载 作者:行者123 更新时间:2023-12-04 07:53:48 25 4
gpt4 key购买 nike

在Symfony中创建自定义字段时,有一种方法定义了 getParent

我们通过从 AbstractType 类扩展,然后使用 getParent 方法返回父类型来定义我们的类。而不是从父类扩展。

我想知道这种方法背后的哲学。

是否可以像这样定义我的自定义类型:

class ImageType extends FileType
{
public function getName()
{
return 'image';
}
}

代替这个:
class ImageType extends AbstractType
{
public function getParent()
{
return 'file';
}

public function getName()
{
return 'image';
}
}

如果可以,那么这两种方法有什么区别?

谢谢!

最佳答案

有两个主要区别:

  • 第一个关于FormTypeExtension。这些扩展名会修改某些表单类型(例如:它们可以更改/添加一些默认选项,甚至添加字段)。
    使用第一种方法(例如继承),所有FileType类型的扩展名都将应用于ImageType,但是使用第二种方法(例如 getParent ),则不会,因此您可以更好地控制自己结构体。
  • 第二个区别是使用buildFormbuildView修改子表单中父表单的行为。
    如果您在子类中提供基类的方法,则使用第一种方法(例如继承),将覆盖,但第二种方法(例如 getParent )将添加子代逻辑的

  • 考虑以下示例:
        // FileType
    public function buildForm(FormBuilderInterface $builder, array $options){
    $builder->add('name', 'text');
    }

    // ImageType
    public function buildForm(FormBuilderInterface $builder, array $options){
    $builder->add('email', 'email');
    }
  • 继承:

    表单字段:[电子邮件]
  • getParent

    表单字段:[名称] [电子邮件]
  • 关于Symfony FormType getParent与继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22861044/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com