在我添加实体的表单类型中,我需要锁定一个选项,以便用户可以更改所有字段,但不能更改锁定的字段。
这是我的代码:
->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']
中的值,但仍然可以使用表单提交?
答案 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,
))