我使用选择列表/实体构建表单类型。我将仅在此选择字段中加载指定的实体,这取决于请求中的参数。
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;
如果用户点击编辑调查问卷,我将列出此调查问卷中的所有问题。在第一步,我得到所有部分,然后我收集这些部分的所有问题,并显示指定问卷的列表视图。
知道用户是否点击编辑指定调查问卷的问题,我只会显示此指定调查问卷中的子元素。
多数民众赞成我的问题:)
答案 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')
// ...
}