Symfony FormType getParent与继承
在Symfony中创建自定义字段时,我们定义了一种方法getParent 我们通过扩展AbstractType类来定义类,然后使用getParent方法返回父类型。而不是从父类扩展 我想知道这种方法背后的理念 是否可以将我的自定义类型定义为:Symfony FormType getParent与继承,symfony,symfony-forms,Symfony,Symfony Forms,在Symfony中创建自定义字段时,我们定义了一种方法getParent 我们通过扩展AbstractType类来定义类,然后使用getParent方法返回父类型。而不是从父类扩展 我想知道这种方法背后的理念 是否可以将我的自定义类型定义为: class ImageType extends FileType { public function getName() { return 'image'; } } 与此相反: class ImageType ex
class ImageType extends FileType
{
public function getName()
{
return 'image';
}
}
与此相反:
class ImageType extends AbstractType
{
public function getParent()
{
return 'file';
}
public function getName()
{
return 'image';
}
}
如果可以,那么这两种方法的区别是什么
谢谢 否,您需要使用AbstractType进行扩展。它用于显示和构建表单,而不是要扩展的简单实体。基本类型(在您的示例中为FileType)与具有特定方法的文件相关,您可以轻松地覆盖它们,但可以通过AbstractType进行扩展,并可以添加新字段。如果您扩展了文件类型,我认为Symfony2不会正确加载任何新函数
我认为第一种方法更紧凑,并且希望使用它,但我认为如果您正在调整buildView或setDefaultOptions,或者添加不属于基类型的另一种方法,那么这将导致问题。有两个主要区别:
- 第一个是关于
s的。这些扩展修改某些表单类型(例如:它们可以更改/添加一些默认选项,甚至可以添加字段)。FormTypeExtension
使用第一种方法(例如,继承),
类型的所有扩展都将应用于文件类型
,但使用第二种方法(例如,getParent),它们不会,因此您可以更好地控制您的结构图像类型
- 第二个区别是使用
和buildForm
在子表单中修改父表单的行为buildView
使用第一种方法(例如继承),如果您在child中提供基类的方法,则将覆盖它们,但第二种方法(例如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 表单字段:[名称][电子邮件]
getParent()
方法。