根据要求以表格形式选择列表

Choicelist in form based on request

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

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

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

更新

我有以下实体。一个有很多部分和有很多问题的部分的问卷。

一个问题实体有一个一对多的自反射。

问题:

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

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

如果用户点击编辑问卷,我会列出该问卷中的所有问题。在第一步中,我获取所有部分,然后我收集该部分的所有问题并显示指定问卷的列表视图。

知道如果用户点击编辑指定问卷的问题,我将只显示此指定问卷中的子元素。

那是我的问题:)

您可以在 $options 中注入 Request 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')

    // ...
}