Zend框架 - 静态表单元素

时间:2009-03-31 06:22:37

标签: php zend-framework zend-form

我有一个表单,用户可以使用该表单创建新商店并编辑现有商店。当这个表单用于编辑商店时,我希望用户看到某些字段,但不能编辑。 STORE_ID。我已经探索了不同的Zend_Form_Elements希望找到某种静态元素,但没有运气。

所以我的问题是,如何使用Zend_Form显示用户无法编辑的信息?

感谢。

5 个答案:

答案 0 :(得分:3)

仅仅{p> 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);