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

时间:2014-12-14 13:44:02

标签: php forms symfony

我的主要表单如下:

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');
  }

  ...
}


如果用户连接的不是管理员(即代替评论),我想添加 ONLY ' part1'来自ArticleBody的主要形式的字段。


我没有成功:
- 尝试访问' part1' ArticleCreateType中的字段 - 尝试从ArticleCreateType向ArticleBodyType发送$选项(但如果可能的话,我更愿意采用第一种方式)


谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

我已将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');
      } 
  }

  ...
}