以Zend形式设置描述

时间:2012-09-01 09:07:57

标签: php zend-framework zend-form zend-decorators

我在我的项目中使用Zend Framework。我想在表单中添加说明/注释,例如

fields marked by * are mandatory

但是我没有找到如何向表单添加描述以及如何将它与装饰器一起使用。

任何帮助都将受到高度赞赏。谢谢。

3 个答案:

答案 0 :(得分:1)

有两种选择:

  • 使用from装饰器或
  • 扩展Zend_Form_Element以创建自定义 元件

我会选择后者,因为将元素的原始html代码部分添加到表单中不仅在元素之前或之后,而且在它们中也很常见。

你应该这样做:

class My_Form_Element_Raw extends Zend_Form_Element
{
    protected $raw_html;
    public function setRawHtml($value)
    {
        $this->raw_html = $value;
        return $this;
    }
    public function getRawHtml()
    {
        return $this->raw_html;
    }
    public function render()
    {
        // you can use decorators here yourself if you want, or wrap html in container tags
        return $this->raw_html;
    }
}

$form = new Zend_Form();
// add elements
$form->addElement(
    new My_Form_Element_Raw(
        'my_raw_element', 
        array('raw_html' => '<p class="highlight">fields marked by * are mandatory</p>')
    )
);
echo $form->render();

扩展Zend_Form_Element时,您不需要覆盖setOption/sgetOption/s方法。 Zend在内部使用 set * get * 以及受保护的属性来检测元素选项,例如protected $raw_html;public function setRawHtml($value)以及public function getRawHtml() 同样命名您的属性$raw_html将同时接受'raw_html'和'rawHtml'两个选项

答案 1 :(得分:1)

向表单添加其他文本的最简单方法是将相应的html添加到页面视图中:

<div>
    <h4>fields marked by * are mandatory</h>
    <?php echo $this->form ?>
</div>

或使用viewScript装饰器来控制整个表单体验:

<article class="login">
    <form action="<?php echo $this->element->getAction() ?>"
          method="<?php echo $this->element->getMethod() ?>">
        <table>
            <tr>
                <th>Login</th>
            </tr>
            <tr>fields marked by * are mandatory</tr>
            <tr>
                <td><?php echo $this->element->name->renderViewHelper() ?></td>
            </tr>
            <tr>
                <td><?php echo $this->element->password->renderViewHelper() ?></td>
            </tr>
            <tr>
                <td><?php echo $this->element->submit ?></td>
            </tr>
        </table>
    </form>
</article>

但是,您可以使用$form->setDescription()向表单添加说明,然后可以使用echo $this->form->getDescription()呈现该说明。在元素级别使用这些方法以及set和getTag()而不是表单级别可能会更好。

提供星号线索我只使用css:

dt label.required:before {
    content: "* ";
    color: #ff0000;
}

如果你愿意的话,我相信你可以用css显示你想要的任何音符。

答案 2 :(得分:0)

 class FormDecorators {
    public static $simpleElementDecorators = array(
        array('ViewHelper'),
        array('Label', array('tag' => 'span', 'escape' => false, 'requiredPrefix' => '<span class="required">* </span>')),
        array('Description', array('tag' => 'div', 'class' => 'desc-item')),
        array('Errors', array('class' => 'errors')),
        array('HtmlTag', array('tag' => 'div', 'class' => 'form-item'))
    );
    }

这些是我经常使用的元素的装饰器,它们包含前缀*和描述装饰器。

然后使用代码:

$element->setDescription('fields marked by * are mandatory');

在一个元素之后添加描述,之后你可以将样式描述显示在底部的某个地方,我希望这会有所帮助,祝你有个美好的一天。