我有一个 Event
实体,其中 People
的实体可以参加。事件结束后,事件主持人坐下来,应该会看到这样的表格。
user a user b user c user d user e user f user g
user a _
user b _
user c _
user d _
user e _
user f _
user g _
所有空白都是用户是否喜欢另一个用户的复选框。下划线是禁用的复选框,因为用户不能喜欢自己。我应该使用choice_list吗?我想像这样处理输入:
foreach(guests as guest)//horizontal
{
foreach(guests as other)//vertical
{
if(guest != other && guest.likes(other) && other.likes(guest))
{
//do something
}
}
}
我将如何使用表单构建器来实现这样的目标?
最佳答案
这种类型的表格不适合您的需求吗?
$userIDsArray = $userIDsArray = array('1' => 'name1','2' => 'name2','3' => 'name3','4' => 'name4');
$form = $this->createFormBuilder($initialData);
foreach($userIDsArray as $userId)
$form->add($userId, 'choice', array(
'choices' => $userIDsArray,
'multiple' => true,
'expanded' => true
)
);
$form = $form->getForm();
对于这组用户,检查用户 1 的所有其他三个用户和仅检查用户 3 的第四个,将产生这样的结果。
array (size=4)
'name1' =>
array (size=3)
0 => int 2
1 => int 3
2 => int 4
'name2' =>
array (size=0)
empty
'name3' =>
array (size=1)
0 => int 4
'name4' =>
array (size=0)
empty
渲染表单时,您可以遍历表单中的每个项目,然后对于每个项目,您可以遍历每个选项并禁用您想要的选项:
{% for formWidget in classForm %}
{{ form_label(formWidget) }}
{% for child in formWidget %}
{{ form_widget(child) }}</td>
{% endfor %}
{% endfor %}
当然,您可以对表格中的行和选择使用不同的数组,实现您想要的结构。
关于Symfony 表单设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22391014/