我在Symfony2中有以下模型,因为关系具有额外的属性(布尔值),因此也必须表示为实体。 我现在正在制作表格,以便为参加过的各个候选人(家长)完成培训 我正在使用嵌套表单如下:
class TrainingCompletionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('titre', 'text', array('disabled' => 'true'))
->add('Intervenant', 'collection', array(
'type' => new TrainingCandidatesType(),'label'=>'Candidat(s)'
,'options' => array('label'=>' '))
);
}
以下是 TrainingCandidatesType 表单
class TrainingCandidatesType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('parents','entity',array('class'=>'ParentsBundle:Parents'
,'label'=>' ','disabled'=>true))
->add('completed')
;
}
这是有效的(父母的提交检查完成了),但是它使得树枝将每个父母呈现为一个下拉列表,每个父母都有一个值,如下所示。我已禁用下拉列表,因为用户无法从列表中进行选择。候选人姓名并不是可以选择的。
有没有办法在没有引用数据转换器或事件订阅者的情况下将每个父名称显示为标签或禁用Symfony中的文本输入?
我已经在Stack网站上找到了相关问题,但没有找到与此问题非常相似的问题。
我是否愿意尝试更好的方法?还是我从一个角度接近它?
答案 0 :(得分:1)
由于您只需要一个布尔值,因此使用扩展和多个选项有一个很好的选择。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('parents','entity',array(
'class'=>'ParentsBundle:Parents',
'label'=>'Label',
'expanded'=>true,
'multiple'=>true
))
;
}
但是这样你就需要数据转换器了。您也可以使用this bundle,为您转换数据,但比您需要的更多。
可能最佳选项也设置为mapped=>false
,并且所选实体集合处理控制器中的Training_Candidates实例创建。将使用true创建所选集合,其余部分需要从数据库加载并使用false创建。另请注意,通过这种方式您不需要嵌套表单,您可以在单个表单中使用它。
希望这可以帮到你。