【发布时间】:2023-04-06 22:36:01
【问题描述】:
我需要在我的 zend 表单中插入这样的 html 代码:
<div class="myClass1" id="myId1" style="display: none;"><img src="images/myImage.jpg" /></div>
上面的html代码在zend框架中的代码是什么。我尝试使用 Create_Element,但它总是在 div 标签内创建一个按钮。请给出示例代码。谢谢
【问题讨论】:
我需要在我的 zend 表单中插入这样的 html 代码:
<div class="myClass1" id="myId1" style="display: none;"><img src="images/myImage.jpg" /></div>
上面的html代码在zend框架中的代码是什么。我尝试使用 Create_Element,但它总是在 div 标签内创建一个按钮。请给出示例代码。谢谢
【问题讨论】:
您可以使用 'note' 元素类型通过将标记作为元素的值传递来添加 html。
【讨论】:
我通常使用带有 array(escape => false) 选项的描述来以表单形式呈现 HTML。
【讨论】:
你考虑过表单 ViewScript 吗?见this discussion。
【讨论】:
我创建了一个名为“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'=>'gnafoobar
'));
可能还有更多的简化。
【讨论】:
如果您正在创建表单元素,我认为您必须重写 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;
}
}
【讨论】:
刚刚使用了 tomas.fejfar 评论中的以下内容时遇到了同样的问题。
array(escape => false)
e.g.
$decorators = array(
'ViewHelper',
'Label',
array('Description', array('escape' => false,)),
'Errors')
);
辛苦了。
干杯
【讨论】:
这是在 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 中预置的解决方案。
【讨论】:
使用上述方法,FormNote 的值在提交表单时仍然会消失,但出现验证错误!
编辑:可以删除,覆盖isValid()问题就消失了。
【讨论】: