Symfony2 - 在嵌套表单的子窗体中添加或删除字段


Symfony2 - Add or remove a field from a subform in nested forms

>我有一个主窗体,看起来像:

class ArticleCreateType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options) {
    $user = $options['user'];
    $builder
      ->add('id')
      ->add('date')
      ->add('title');
    if(in_array('ROLE_SUPER_ADMIN', $user->getRoles())) {
      $builder->add('articlebody', new ArticleBodyType());
    }
    else {
      // how to add only 'part1' from ArticleBody ??
    }
  }
  ...
}


身体部位的子形态是这样的:

class ArticleBodyType extends AbstractType {
  public function buildForm(FormBuilderInterface $builder, array $options) {
      $builder
        ->add('part1', 'textarea', array('required' => false))
        ->add('part2', 'textarea');
  }
  ...
}


当连接的用户不是管理员(即评论)时,我只想在主表单中添加来自 ArticleBody 的"part1"字段。


我没有成功:
- 尝试访问文章创建类型
中的"part1"字段- 尝试将$options从ArticleCreateType发送到ArticleBodyType(但如果可能的话,我更愿意做第一种方法)


感谢您的帮助。

我会将user传递给ArticleBodyType,并检查其中的用户角色。

class ArticleCreateType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options) {
    $user = $options['user'];
    $builder
      ->add('id')
      ->add('date')
      ->add('title')
      ->add('articlebody', new ArticleBodyType(), [
          'user' => $user
      ]);
  }
  ...
}
class ArticleBodyType extends AbstractType {
  public function buildForm(FormBuilderInterface $builder, array $options) {
      $user = $options['user'];
      $builder->add('part1', 'textarea', array('required' => false));
      if(in_array('ROLE_SUPER_ADMIN', $user->getRoles())) {
        $builder->add('part2', 'textarea');
      } 
  }
  ...
}