根据要求提供表格的选择列表

时间:2015-03-24 10:07:47

标签: symfony

我使用选择列表/实体构建表单类型。我将仅在此选择字段中加载指定的实体,这取决于请求中的参数。

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('children', 'entity', array(
                        'class' => 'AppMyBundle:Items',
                        'choices' => array(), // <------ This i fill dynamic, based on request parameter
                        'label' => '',
                        'translation_domain' => 'messages',
                        'multiple' => true,
                        'expanded' => false,
                        'attr' => array('class' => 'childrens'))
                );
    }

我可以在表单类型中访问请求吗?或者我该如何处理这个问题?

更新

我有以下实体。一份问卷,其中有许多部分和部分都有很多问题。

  • 章节问卷:OneToMany
  • 问题部分:OneToMany

问题实体有一对多的自我反思。

问题:

/**
     * @ORM\OneToMany(targetEntity="Question", mappedBy="parent")
     **/
    private $children;

    /**
     * @ORM\ManyToOne(targetEntity="Question", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
     **/
    private $parent;

如果用户点击编辑调查问卷,我将列出此调查问卷中的所有问题。在第一步,我得到所有部分,然后我收集这些部分的所有问题,并显示指定问卷的列表视图。

知道用户是否点击编辑指定调查问卷的问题,我只会显示此指定调查问卷中的子元素。

多数民众赞成我的问题:)

1 个答案:

答案 0 :(得分:0)

您可以在Request中注入$options public function buildForm(FormBuilderInterface $builder, array $options)

然后通过$request = $options['req'];

访问它

按如下方式注入:

$taskForm = $this->createForm(new TaskType(), $task, array(
   'req' => $this->getRequest(),
));

并在以下内容中添加要求:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver
        ->setDefaults(array(
            'data_class' => 'Acme\TaskBundle\Entity\Task',
        ))
        ->setRequired(array('req'))
        ->setAllowedTypes('req', 'Symfony\Component\HttpFoundation\Request')

    // ...
}