我有一个表单,用户可以使用它来创建新商店和编辑现有商店。当此表单用于编辑商店时,我希望用户查看某些字段但不进行编辑,例如。store_id。我探索了不同的 Zend_Form_Elements 希望找到某种静态元素但没有运气。
所以我的问题是,如何使用 Zend_Form 显示用户无法编辑的信息?
谢谢。
我有一个表单,用户可以使用它来创建新商店和编辑现有商店。当此表单用于编辑商店时,我希望用户查看某些字段但不进行编辑,例如。store_id。我探索了不同的 Zend_Form_Elements 希望找到某种静态元素但没有运气。
所以我的问题是,如何使用 Zend_Form 显示用户无法编辑的信息?
谢谢。
readonly
单独是不够的,因为用户仍然可以根据需要对其进行编辑。您应该使用$element->setIgnore(true)
它来确保Zend_Form_Element
不会尝试从 POST/GET 填充元素,并且我也会仔细检查。您必须确保进入数据库的值永远不会包含此元素。
最后,如果您希望元素以不同于 with 的方式显示readonly
,您可以通过更改元素装饰器来实现。
我自己设法解决了这个问题。解决方案是将元素上的视图助手更改为 formNote 助手,例如。$element->helper = 'formNote'。这样做的结果是该值显示为纯文本,而不是在表单元素内。
感谢您的回答。
当您在提交表单时不需要填充元素值时,这是一个非常好的解决方案。等效的解决方案是使用表单元素方法setAttrib()
并禁用表单元素
$formElement->setAttrib('disable','disable')
这只会冻结元素。
但是,如果您需要填充该字段,使用以前的解决方案,您可能需要添加额外的隐藏字段,这将传递值。开发自定义表单元素将是一种很好的风格,但这并不是每个开发人员都欢迎的,因此您可以使用一些棘手的方法将表单元素设置为仅文本但填充其值。这样,当您将元素创建为隐藏字段时,设置其值并使用 Form Element 方法setDescription()
设置和显示元素文本值。
$formElement = new Zend_Form_Element_Hidden( 'elName',
array( 'label' => 'elLabel', 'value' => 'elValue' ) );
$formElement->setDescription( 'elValue' );
然后您可以渲染该隐藏元素并使用
$formElement->getDescription()
.
$element->setAttrib('readonly', 'true');
http://www.w3.org/TR/html401/interact/forms.html#adef-readonly
根据 Amr Mostafa 的说法,如果您使用:
$element->setAttrib('readonly', 'true');
或者
$element->setAttribs(array('disabled' => 'disabled'));
用户仍然通过 POST/GET 发送值,并将它们存储在数据库中。
我不考虑 POST/GES 值的唯一方法是:
$element->setIgnore(true)
例子:
$element = new Zend_Form_Element_Text('element');
$element->setIgnore(true);