我的问题基本上是,是否可以从父表单更改嵌入式字段的选项?
为了说明这个问题,我有一个父表单类型类:
class FruitFormType extends AbstractType { public function buildForm(FormBuilderInterface $builder,array $options) { $builder ->add('name','text') ->add('apple',new AppleFormType()) ; }
和一个单独的包中的子表单类型类,我不想编辑,像这样:
class AppleFormType extends AbstractType { public function buildForm(FormBuilderInterface $builder,'text') ->add('qty','integer',array('label' => 'rubbish label') ; }
而且我想把qty的标签改成别的东西,但是我只想在FruitForm中,而不是使用AppleForm的地方.我曾经希望能够做一些像:
class FruitFormType extends AbstractType { public function buildForm(FormBuilderInterface $builder,new AppleFormType(),array('qty' => array('label' => 'better label'))) ; }
要么:
class FruitFormType extends AbstractType { public function buildForm(FormBuilderInterface $builder,new AppleFormType()) ; $builder->get('apple')->get('qty')->setOption('label','better label'); }
但是这些(和其他一些尝试)都没有让我失望.没有可以看到的setOption方法.
有人知道这样做吗?
谢谢
解决方法
我也想改变选项,从FOSUserBundle的现有字段显而易见的“改变标签”的情况.我知道我可以在树枝或翻译中做到这一点.
@redbirdo指出我正确的方向,“似乎添加一个名称相同的字段将取代它”.这是解决方案:
$field = $builder->get('username'); // get the field $options = $field->getOptions(); // get the options $type = $field->getType()->getName(); // get the name of the type $options['label'] = "Login Name"; // change the label $builder->add('username',$type,$options); // replace the field