3

我需要在我的 zend 表单中插入这样的 html 代码:

<div class="myClass1" id="myId1" style="display: none;"><img src="images/myImage.jpg" /></div>

上述html代码的zend框架中的代码是什么。我尝试使用 Create_Element,但它总是在 div 标签内创建一个按钮。请给出示例代码。谢谢

4

8 回答 8

8

我创建了一个名为“html”的自定义元素。我将 Html.php 添加到 /Form/Element:


/** Zend_Form_Element_Xhtml */
require_once 'Zend/Form/Element/Xhtml.php';

/**
 * HTML form element
 * 
 */
class Zend_Form_Element_Html extends Zend_Form_Element_Xhtml
{
    /**
     * Default form view helper to use for rendering
     * @var string
     */
    public $helper = 'formHtml';
}

其次,我必须添加一个视图助手 FormHtml.php(我把它放在 application/views/helpers 中):


/**
 * Abstract class for extension
 */
require_once 'Zend/View/Helper/FormElement.php';

/**
 * Helper to show HTML
 *
 */
class Zend_View_Helper_FormHtml extends Zend_View_Helper_FormElement
{
    /**
     * Helper to show a html in a form
     *
     * @param string|array $name If a string, the element name.  If an
     * array, all other parameters are ignored, and the array elements
     * are extracted in place of added parameters.
     *
     * @param mixed $value The element value.
     *
     * @param array $attribs Attributes for the element tag.
     *
     * @return string The element XHTML.
     */
    public function formHtml($name, $value = null, $attribs = null)
    {
        $info = $this->_getInfo($name, $value, $attribs);
        extract($info); // name, value, attribs, options, listsep, disable

        // Render the button.
        $xhtml = 'view->escape($id) . '">'
            . $this->_htmlAttribs($attribs)
            . $this->view->escape($value) . '';

        return $xhtml;
    }
}

然后,您可以将 html 添加到表单中,如下所示:


$form->createElement('html', 'someid', array('value'=>'gna

foobar

'));

可能还有一些更简化的可能。

于 2009-10-10T14:45:19.683 回答
4

如果您正在创建一个表单元素,我认为您必须重写 isValid() 方法,如下面的代码所示,否则您的“值”将在验证错误时消失:

class RenomoZF_Form_Element_Note extends Zend_Form_Element_Xhtml
{
    /**
     * Default form view helper to use for rendering
     * @var string
     */
    public $helper = 'formNote';

    public function isValid($value, $context = null) {
      return TRUE; 
    }

}
于 2009-12-14T13:06:42.350 回答
3

您可以使用 'note' 元素类型通过将标记作为元素的值传递来添加 html。

于 2009-08-06T13:14:06.977 回答
2

这是在 ZF 1.10 中完成的。似乎有人制作了 Zend_View_Helper_FormNote 类,因此您可以插入任意(除了装饰器)HTML。

要使用它,您必须扩展 Zend_Form_Element_Xhtml。

<?php

/** Zend_Form_Element_Xhtml */
require_once 'Zend/Form/Element/Xhtml.php';

/**
 * Note form element
 * 
 */
class MyNS_Form_Element_Note extends Zend_Form_Element_Xhtml
{
    /**
     * Default form view helper to use for rendering
     * @var string
     */
    public $helper = 'formNote';
}

然后使用表单插件加载器,将表单/元素类添加到表单对象。我把它放在我的库文件夹(MyNs/Form/Element/Note.php)中。

 $yourForm= new Zend_Dojo_Form();
 $yourForm->addPrefixPath("MyNS_Form", "MyNS/Form/");

现在你可以像任何元素一样调用它。

 $yourForm->addElement(
                'note',
                'myElementId',
                array(
                 'value'=>'<a href="#">omgwtfbbq</a>'
                )
            )

正如我之前提到的,这仍然将您的代码包装在装饰器中,但它是 ZF 中预置的解决方案。

于 2010-06-29T21:03:02.880 回答
1

有同样的问题只是使用了来自 tomas.fejfar 评论的以下内容。

array(escape => false)

e.g. 

$decorators = array(
    'ViewHelper',
    'Label',
    array('Description', array('escape' => false,)),
    'Errors')
);

工作了一个款待。

干杯

于 2010-06-16T18:02:01.553 回答
0

我通常使用带有 array(escape => false) 选项的描述来以表单形式呈现 HTML。

于 2009-08-06T21:00:17.823 回答
0

你考虑过表单 ViewScript 吗?请参阅此讨论

于 2009-08-14T16:50:51.327 回答
0

使用上述方法,FormNote在提交带有验证错误的表单时,值仍然会消失!

编辑:可以删除,覆盖isValid()问题就消失了。

于 2011-05-23T13:57:06.127 回答