【发布时间】:2014-04-26 12:29:33
【问题描述】:
在我的 Symfony2 中,我有一个用户电子邮件表(我的数据库中的实体):
{% for email in emails %}
...
{{ email.subject }}
...
{% endfor %}
我想通过将表格包装在一个表单中并为每一行添加一个复选框来使这些可选。
在 Symfony2 中解决此问题的最佳方法是什么?我只能认为我必须在 Type 中创建一个 Type,这似乎不太理想:
class SelectableEmailsType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('selectableEmails', 'collection', [ 'type' => new SelectableEmailType() ]);
}
public function getName()
{
return 'selectableEmails';
}
}
class SelectableEmailType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('email', new EmailType());
$builder->add('selected', 'checkbox');
}
public function getName()
{
return 'selectableEmail';
}
}
class EmailType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('subject', 'text');
...
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults([
'data_class' => 'EmailOctopus\Bundle\ListsBundle\Entity\ListEntity',
]);
}
public function getName()
{
return 'email';
}
}
【问题讨论】:
-
这就是它所需要的,特别是如果 EmailType 用于其他形式。这种嵌套很常见。当然,如果您真正需要做的只是选择电子邮件(而不是编辑主题),则不需要 EmailType。
-
@Cerad 谢谢,很高兴知道。我只需要选择电子邮件 - 如果我删除
EmailType,我应该如何绑定实体? -
您实际上不需要绑定电子邮件实体,因为您没有修改它。相反,您可以使用 vars 参数直接从 twig 模板访问它。 {{ selectableEmail.vars.email.subject }}
-
@Cerad 但是如果不绑定至少 id,我怎么知道选择了哪些电子邮件?