【发布时间】:2016-05-10 15:06:05
【问题描述】:
我正在关注 dynamic form modification 的 Symfony (v2.7) Cookbook 食谱。我的目标是根据用户的单选按钮选择显示某些字段。例如,如果用户希望根据上一会计年度的记录过滤搜索,他从 criteriaFilter 选择字段类型(示例如下)中选择“会计年度”单选按钮,然后选择合适的生成字段。如果他改变主意并选择“学期”,则会计年度字段将替换为学期字段,依此类推。
示例代码:
$builder
->add('librarian', 'entity', array(
'class' => 'AppBundle:Staff',
'query_builder' => function(EntityRepository $er){
$qb = $er->createQueryBuilder('st');
$qb
->where('st.employmentStatus = :employmentStatus')
->setParameter('employmentStatus', 'faclib')
->orderBy('st.lastName', 'DESC')
->getQuery();
return $qb;
},
'placeholder' => 'All Librarians',
'required' => false
))
->add('program', 'entity', array(
'class' => 'AppBundle:LiaisonSubject',
'query_builder'=>function(EntityRepository $er){
$qb = $er->createQueryBuilder('ls');
$qb
->orderBy('ls.root, ls.lvl, ls.name', 'ASC')
->getQuery();
return $qb;
},
'property' => 'indentedTitle',
'placeholder' => 'All Programs',
'required' => false,
'label' => 'Program'
))
->add('criteriaFilter', 'choice', array(
'expanded' => true,
'multiple' => false,
'choices' => array(
'academic' => 'Academic Year',
'fiscal' => 'Fiscal Year',
'semester' => 'Semester',
'custom' => 'Custom Range'
),
))
;
根据食谱条目,这似乎非常简单。但是,我创建的表单并未绑定到实体。因此,通过方法获取数据
$builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event){
$form = $event->getForm();
//normally the entity, but NULL in this case
$data = $event->getData();
...
通常允许在实体属性上调用 getter 方法返回 null。所以显然这在这种情况下是行不通的。
所以问题是,是否有另一种方法可以在不绑定到实体的表单内动态生成字段?
【问题讨论】:
标签: symfony symfony-forms