如何使用Symfony表单组件呈现read-only
字段?
这就是我试图做到这一点无济于事的方法:
Symfony 2
$builder
->add('descripcion', 'text', array(
'read_only' =>'true'
));
}
Symfony 3
$builder
->add('descripcion', TextType::class, array(
'read_only' => 'true'
));
}
答案 0 :(得分:20)
提供的答案都会在 Symfony 3
上结束此例外未捕获的PHP异常Symfony \ Component \ OptionsResolver \ Exception \ UndefinedOptionsException:“选项”read_only“不存在。
这样做的正确方法是利用字段上的attr
属性:
->add('descripcion', TextareaType::class, array(
'attr' => array(
'readonly' => true,
),
));
答案 1 :(得分:9)
您已将只读属性声明为字符串,它必须是布尔值。
删除true
->add('descripcion','text',array('read_only' => true))
是的,没有引号。
答案 2 :(得分:6)
我认为唯一安全的方法是将表单字段显示为只读,并且还会阻止您的表单接受请求中的新值。
$builder->add(
'description',
TextType::class,
['disabled' => true]
);
使用['attr' => ['readonly' => true]]
或['attr' => ['disabled' => true]]
的其他建议会让您容易受到伪造请求的攻击。</ p>
后两个选项都会在字段上设置readonly
或disabled
属性,但如果包含在请求中,您的表单仍会接受此字段的新值。
只有上面的第一个选项会同时禁用表单字段,并且还会阻止您的表单接受请求中字段的新值。
我用Symfony Form 3.4进行了测试。我不知道4的行为是否相同。
答案 3 :(得分:5)
read_only 已被弃用。所以请改用 readonly 。并为此属性提供布尔值
->add('','text',array('readonly' => true))
答案 4 :(得分:4)
更新:自Symfony 3.0起,应在 attr 选项中设置 readonly 值。 http://symfony.com/doc/2.8/reference/forms/types/form.html#read-only
也可以使用禁用选项。
答案 5 :(得分:3)
Symfony 4允许在表单字段中仅使用“禁用”选项。但这与“只读”有所不同。
我发现“只读”的唯一解决方案是:
->add('fieldname', TextType::class, [
'label' => false,
'attr'=> [ 'readonly' => true ]
])
答案 6 :(得分:1)
建议使用Disabled选项,因为根据文档,所有提交的值都会被忽略:https://symfony.com/doc/current/reference/forms/types/text.html#disabled
$builder->add('descripcion', TextType::class, [
'disabled' => 'true',
]);
答案 7 :(得分:0)
如果familia和证明者是与其他实体的关系,我认为他们不应该是文本类型。尝试使其类型无效或更改为 entity 类型并检查它是否有效。
答案 8 :(得分:0)
让我添加一些其他答案没有帮助管理的东西。作为领域的治疗,但&#34;调整&#34;禁用版本可能在许多情况下工作。但是,它至少很难以一些完全阻止版本的格式呈现(即渲染为标签)。
如何解决这个问题?我所做的是将字段定义为HiddenType,并在模板中使用{{ form.vars.value.myfield }}
或{{ item.myfield }}
进行渲染&#34; item&#34;作为实体对象,包含在您能想到的任何内容中,与任何其他HTML元素一样。
答案 9 :(得分:0)
$LogFileHandle = fopen($PathToLog."/cur.log", "a+");
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $LogFileHandle);
而非readonly
。您应该像这样在read_only
中设置此选项:
attr
答案 10 :(得分:0)
其他解决方案可能是:
->add('value', TextType::class, ['disabled' => true]):
来自:http://symfony.com/doc/current/reference/forms/types/text.html#disabled
答案 11 :(得分:0)
仅“禁用”选项不会导致错误
$builder
->add('descripcion', TextType::class, array(
'disabled' => 'true'
));
}
答案 12 :(得分:0)
对于实体类型字段,禁用工作正常
->add('organizacion', EntityType::class, array(
'class' => 'AppBundle:Organizacion',
'label' => 'Institución/Organización',
'choice_label' => 'nombre',
'disabled' => true
))