在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 ),则不会,因此您可以更好地控制自己结构体。 buildForm
和buildView
修改子表单中父表单的行为。如果您在子类中提供基类的方法,则使用第一种方法(例如继承),将覆盖,但第二种方法(例如 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');
}
表单字段:[电子邮件]
表单字段:[名称] [电子邮件]
关于Symfony FormType getParent与继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22861044/