我的父表单类型有一个字段“title”,带有通用标签“Title”。 假设我有五个子表单,其中三个需要更改标签。我怎么做。我疯了。
class ParentType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('title', TextType::class, [
'label' => 'generics.title',
]);
}
}
class ChildType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
// I thought I could change the label of parent around here
// without removing and adding it again
$builder->add('description', TextareaType::class, [
'label' => 'generics.description',
]);
}
public function getParent()
{
return ParentType::class;
}
}
我不想在树枝上解决这个问题。
如何在ParentType中添加自定义titleLabel选项并在子配置configureOptions()方法中进行设置?
答案 0 :(得分:0)
您可以使用“模板方法模式”。 在ParentType中编写名为 getTitle 的模板方法。 并指定此方法调用作为标签选项。
protected function getTitle()
{
return 'generics.title'
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('title', TextType::class, [
'label' => $this->getTitle(),
]);
}
从ParentType派生ChildType并在ChildType中编写具体的 getTitle 。
class ChildType extends ParentType {
protected function getTitle()
{
return 'concrete label';
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->add('description', TextareaType::class, [
'label' => 'generics.description',
]);
}
}