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

时间:2011-06-14 17:31:38

标签: php forms attributes symfony

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

我问的原因是因为我正在研究某个边缘情况,其中read_only是不够的。

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

如果我以read_only字段开头,它将被禁用,但我永远无法将数据绑定到它。因此,鉴于我前面提到的外部逻辑的结果,我将无法使用read_only。所以这让我没有其他选择,只是使用了一个不同的属性,这将使该字段被禁用。

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

3 个答案:

答案 0 :(得分:20)

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

<input type="text" name="myInput" myAttr="myValue" />

如果这是你想要做的,那么这是可能的,如下所示:

$form = $this->createFormBuilder($someObj)
        ->add('myInput', 'text', array(
             'attr' => array('myAttr' => 'myValue')
        )
        ->getForm();

文档在这里:

http://symfony.com/doc/2.0/reference/forms/types/field.html

答案 1 :(得分:1)

很难确切地说出你想要做什么,但听起来你想要根据某些事件动态生成表单,如下所述:

http://symfony.com/doc/2.0/cookbook/form/dynamic_form_generation.html

答案 2 :(得分:0)

您的限制不是Symfony,您的限制是HTML和HTTP。不幸的是,一旦HTTP请求得到满足,一旦将数据发送到浏览器,服务器就无法做任何改变渲染的内容(好吧,几乎没有,总有天网)。唯一的选择是JavaScript(如果他们没有运行Lynx,可以做很多事情。)

我在Google网上论坛上看到了您的question,并根据他们两者的组合,我可以告诉您,您只有两种选择。

  • 您可以将该选项显示为对来自浏览器的第一个回复的响应。
  • 您可以使用JavaScript,然后处理服务器端的任何故障。

你最好的选择?我认为用户会喜欢JavaScript选项。无论如何,验证服务器端的用户信息是一个很好的策略。显然,通过JavaScript验证让用户尽快知道,但无论如何你都需要检查他们在服务器上的输入。

顺便说一句,要禁用Symfony中的表单字段,逐步说明是here