如何在Symofny表单的选择字段中锁定选项选项

时间:2015-10-26 07:05:09

标签: forms symfony doctrine-orm

在我添加实体的表单类型中,我需要锁定一个选项,以便用户可以更改所有字段,但不能更改锁定的字段。

这是我的代码:

        ->add('network', 'entity', array(
            'class' => 'AcmeBundle:Network',
            'data' => $options['current_network'],
            'disabled' => true,
        ))

$options['current_network']将字段中的选项设置为预期值。使用'disabled' => true时,该字段也会按预期锁定。

但是,当我提交表单时,此字段未提交且Symfony抛出错误

  

完整性约束违规:1048列'network_id'不能   空

这是正确的,network_id不应该是null

如何将此字段锁定为$options['current_network']中的值,但仍然可以使用表单提交?

3 个答案:

答案 0 :(得分:0)

您可以从表单中删除它并将其设置在控制器

    ...

    if ($form->isValid()){

       $entity->setNetwork($network); // whatever your network is

       $em->persist($entity);
       $em->flush();
    ...
    }
...

答案 1 :(得分:0)

您应该使用readonly而不是disabled。 readonly元素是不可编辑的,但是在相应的表单提交时发送,禁用的元素不可编辑,并且不会在提交时发送。

答案 2 :(得分:0)

要做到这一点,你需要在绑定表单之前设置网络

    $entity = new Entity();
    $entity->setNetwork($network);

    $form->handleRequest($request);

    if ($form->isValid()){
       $em->persist($entity);
       $em->flush();
    }

并以您的形式:

->add('network', 'entity', array(
        'class' => 'AcmeBundle:Network',
        'disabled' => true,
    ))