Php 是否可以在Symfony 2中创建自定义表单字段属性?

Php 是否可以在Symfony 2中创建自定义表单字段属性?,php,forms,attributes,symfony,Php,Forms,Attributes,Symfony,在Symfony2表单组件中,是否可以创建自定义属性 我问这个问题的原因是因为我正在处理一个特定的边缘案例,其中只读是不够的 下面是一个场景:我需要根据一些外部逻辑解析的结果绑定数据。这是至关重要的,因为我可能有默认禁用的字段,但根据外部逻辑,这些字段可能会被激活。我无法使用客户端脚本生成此结果,必须在form属性中禁用它 如果我以只读字段开始,它将被禁用,但我将永远无法将数据绑定到它。因此,鉴于上述外部逻辑的结果,我将无法使用只读。因此,我没有其他选择,只能使用另一个属性,这将使字段禁用 是否

在Symfony2表单组件中,是否可以创建自定义属性

我问这个问题的原因是因为我正在处理一个特定的边缘案例,其中只读是不够的

下面是一个场景:我需要根据一些外部逻辑解析的结果绑定数据。这是至关重要的,因为我可能有默认禁用的字段,但根据外部逻辑,这些字段可能会被激活。我无法使用客户端脚本生成此结果,必须在form属性中禁用它

如果我以只读字段开始,它将被禁用,但我将永远无法将数据绑定到它。因此,鉴于上述外部逻辑的结果,我将无法使用只读。因此,我没有其他选择,只能使用另一个属性,这将使字段禁用


是否可以创建自定义属性以产生此禁用效果?

您的限制不是Symfony,而是HTML和HTTP。不幸的是,一旦HTTP请求得到满足,一旦数据被发送到浏览器,服务器就无法更改呈现内容(好吧,几乎什么都没有,总是有Skynet)。唯一的选择是JavaScript(如果他们不运行Lynx,这可以做很多事情)

我在谷歌群组上看到了你的观点,基于两者的结合,我可以告诉你,你只有两个选择

  • 您可以使该选项显示为对来自浏览器的第一个响应的响应
  • 您可以使用JavaScript,然后在服务器端处理任何故障
你最好的选择?我认为用户会喜欢JavaScript选项。无论如何,在服务器端验证用户信息是一个好策略。显然,通过使用JavaScript验证,让用户尽快知道,但无论如何,您都需要在服务器上检查他们的输入。


顺便说一句,要在Symfony中禁用表单字段,需要一步一步的说明。

我不确定我是否正确理解了您的问题;是否要向表单输入标记添加任意属性?例如:

<input type="text" name="myInput" myAttr="myValue" />
文件如下:


很难说清楚您想要做什么,但听起来您想要基于某个事件动态生成表单,如下所述:


只读不起作用,因为在Symfony2(非Symfony1)中,如果字段为只读,则无法将数据绑定到禁用字段,这就是为什么我想为禁用字段创建自己的自定义属性,以便在不进行只读的情况下将其禁用。使用Javascript禁用该字段只是一种解决方法,因为html文档在语义上仍然不正确。这是什么“外部逻辑解析”?从我收集的信息来看,您希望根据一些其他标准创建一个可选的表单字段,但是您没有描述该标准是什么,因此很难确定解决方案应该在哪里。这是AJAX调用、表单更新或控制器内部的结果吗?我尝试了这个解决方案来设置输入字段的属性名称值。但是,当我呈现表单并检查元素时,set name值被指定给该字段的标签。我将属性值更改为“class”,它就工作了。为什么name属性不像class属性那样正常工作?@Floricel,输入的
name
属性是由
$builder->add($inputName,$type)
的第一个参数决定的,所以尝试用
attr
选项覆盖它并没有什么意义。可能是
add()
的第一个参数总是覆盖
attr['name']
$form = $this->createFormBuilder($someObj)
        ->add('myInput', 'text', array(
             'attr' => array('myAttr' => 'myValue')
        )
        ->getForm();