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