-3

我在我的项目中使用 Zend Framework。我想在我的表格中添加描述/注释,例如

fields marked by * are mandatory

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

任何帮助将不胜感激。谢谢。

4

3 回答 3

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/s,getOption/s方法。Zend 在内部使用set*get*和受保护的属性来检测在这种情况下的元素选项protected $raw_html;public function setRawHtml($value)并且public function getRawHtml() 命名您的属性$raw_html将分别接受 'raw_html' 和 'rawHtml' 两个选项

于 2012-09-01T10:33:06.710 回答
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 显示您想要的任何注释。

于 2012-09-01T10:43:21.310 回答
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');

向一个元素添加描述,之后您可以将描述样式设置为出现在底部的某处,我希望这会有所帮助,祝您有美好的一天。

于 2012-09-01T10:31:53.057 回答