Symfony表单只读字段

时间:2012-10-31 13:08:07

标签: symfony symfony-forms symfony-2.1

如何使用Symfony表单组件呈现read-only字段?

这就是我试图做到这一点无济于事的方法:

Symfony 2

$builder
    ->add('descripcion', 'text', array(
        'read_only' =>'true'
    ));
}

Symfony 3

$builder
    ->add('descripcion', TextType::class, array(
        'read_only' => 'true'
    ));
}

13 个答案:

答案 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>

后两个选项都会在字段上设置readonlydisabled属性,但如果包含在请求中,您的表单仍会接受此字段的新值。

只有上面的第一个选项会同时禁用表单字段,并且还会阻止您的表单接受请求中字段的新值。

我用Symfony Form 3.4进行了测试。我不知道4的行为是否相同。

答案 3 :(得分:5)

自Symfony 2.8以来,

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
))