Symfony 表单设计

标签 symfony doctrine-orm symfony-forms

我有一个 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/

相关文章:

symfony - 如何使用查询生成器仅获取某些字段

symfony - 原则 2 native 查询从连接实体中选择

php - Symfony 2 Doctrine 一对多不写连接表

symfony - 表单事件监听器(如 TrimListener)如何将 "bound"映射到 Symfony 中的表单选项?

symfony - 将验证组设置为 symfony 2 中的嵌入表单

php - 使用 Symfony PHPUnit 桥 ClockMock 设置日期/时间

php - Symfony2 - 实体子文件夹上实体的getRepository

php - Symfony 4 不 Autowiring 动态路由 Controller

PHPUnit:测试完成后如何从数据库中删除测试数据?

php - 基于 Symfony2 中其他字段值的字段条件验证