【问题标题】:Symfony2 forms + doctrine - selected choicesSymfony2 形式 + 教义 - 选择的选项
【发布时间】:2015-09-21 13:37:22
【问题描述】:

好吧,伙计们,

我有基于具有整数字段的实体的表构建,

iduser_idproject_idstatsrisks

现在我正在尝试构建仅包含字段 statsrisk 的表单。所以我选择userIdprojectId

$dql = "SELECT m FROM DevDashProjectBundle:Module m WHERE m.user ="
    .$options['user']->getId()."AND m.project ="
    .$options['project']->getId();
$results = $this->entityManager->createQuery($dql)->getArrayResult();  

现在我想构建表单,其中选择了值为 >0(或 true 或 sth)且未选择 0(或 false)的字段统计信息。接下来在编辑表单后,我想发布对此字段的更改 - 所以选择的字段是1,而不是选择0

@编辑

我的实体如下所示:

 /**
 * @ORM\Column(name="stats", type="boolean", nullable=false)
 * 
 * @var boolean
 */
protected $stats=true;

如您所见,默认值为 true。

在控制器中我传递这样的值:

  $form = $this->createForm(new ModuleType($em), $module, array('user' => $user, 'project' => $project));

$user 和 $project 需要选择正确的行。

ModuleType 中的下一步

        $builder
        ->add('module', 'checkbox', array(
            'label' => 'Stats',
        ));

table 模块的字段 stats 是 tinyint(Symfony 解释为布尔值)设置为 1,但复选框 stats 仍未选中。

我也在尝试这样的事情:

        $builder
        ->add('module', 'entity', array(
            'class' => 'DevDashProjectBundle:Module',
            'mapped' => true,
            'multiple' => true,
            'expanded' => true,
            'property' => 'stats',
            'query_builder' => function(EntityRepository $er) use ($options){
                return $er
                    ->createQueryBuilder('m')
                    ->where(
                        'm.user =' .$options['user']->getId().
                        'AND m.project=' .$options['project']->getId()
                    );
            }
        )
    );

因为我需要按 user_id 和 project_id 选择统计信息。查询返回正确的值,但值为 true 的复选框仍未选中。

【问题讨论】:

    标签: php mysql forms symfony doctrine-orm


    【解决方案1】:

    您可以像这样在 Module 实体上构建表单:

    $form = $this->createFormBuilder($module)
            ->add('stats', 'checkbox', array('label' => 'Stats'))
            ->getForm();
    

    但实体中的 stats 字段必须声明为布尔值。 另请参阅此问题:PHP/Symfony2 Form Checkbox field

    编辑: 这个: $builder->add('module', 'checkbox', array('label' => 'Stats'));

    应该是 $builder->add('stats', 'checkbox', array('label' => 'Stats'));

    与您的字段名称相匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多