我会尽量保持清醒。 我正在使用带有文本元素的zend表单,该文本元素使用 - > setIsArray(true);
$submenu2 = new Zend_Form_Element_Text('submenu2');
$submenu2->setValue('Sous menu 2')
->setIsArray(true)
->setAttrib('class', 'cloneSub')
->setAttrib('id', 'sub1')
->setAttrib('onFocus', 'javascript:myFocus(this); return;')
->setAttrib('onBlur', 'javascript:myBlur(this); return;');
$this->addElement($submenu2);
我将元素设置为数组,因为我使用javascript动态添加新元素 在html中,它意味着:
<input type="text" name="submenu2[]" />
我的问题:当我提交表单时,它会产生以下错误
警告:htmlspecialchars()要求参数1为字符串,数组在第905行的/usr/local/zend/share/ZendFramework/library/Zend/View/Abstract.php中给出
在网上到处查找后,我找到了原因,但没有找到解决方案。这是由于zend_form :: isValid()使用的_escape()方法,它只是期待字符串。
我在Rob Allen的DevNotes中找到了解决方案的开始:
http://akrabat.com/page/29/?flattrss_redirect&id=31&md5=b369e042145cc83b1dd4b0031132b801
查看以下部分:“简单的Zend_Form文件上载示例重新访问”
但是当我尝试弯曲代码来解决我的问题时,它会产生以下错误:
致命错误:在...中找不到“App_Form_Element_Text”类
顺便说一句,如果只是尝试将数据填充到同一类型的字段中,我会遇到同样的问题。
有没有人有任何想法? 非常感谢。
UPDATE:
$submenu2 = new Custom_Elements_ArrayElement('submenu2');
$submenu2->setValue('Sous menu 2')
->setIsArray(true)
->setAttrib('class', 'cloneSub')
->setAttrib('id', 'sub1')
->setAttrib('onFocus', 'javascript:myFocus(this); return;')
->setAttrib('onBlur', 'javascript:myBlur(this); return;');
$this->addElement($submenu2);
我在“APPLICATION_PATH”/../library/Custom/Elements“中创建了你给我的课程 我明白了:
致命错误:未找到“Custom_Elements_ArrayElement”类
答案 0 :(得分:2)
以下是example:
创建自己的元素类型,接受一组值,和 然后是一个装饰器,它将输出各种输入项。
class My_Element_ArrayElement extends Zend_Form_Element
{
public function init()
{
$this->addPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');
}
public function setValue($value)
{
$this->_value = (array) $value;
}
public function getValues()
{
return $this->_value;
}
public function loadDefaultDecorators()
{
if ($this->loadDefaultDecoratorsIsDisabled()) {
return;
}
$decorators = $this->getDecorators();
if (empty($decorators)) {
$this->addDecorator('ArrayElement');
}
}
}
class My_Decorator_ArrayElement extends Zend_Form_Decorator_Abstract
{
public function render($content)
{
$element = $this->getElement();
$view = $element->getView();
$markup = '';
$name = $element->getName() . '[]';
foreach ($element->getValues() as $value) {
$markup .= $view->formHidden($name, $value) . "\n";
}
$separator = $this->getSeparator();
switch ($this->getPlacement()) {
case 'PREPEND':
return $markup . $separator . $content;
case 'APPEND':
default:
return $content . $separator . $markup;
}
}
}
答案 1 :(得分:0)
该代码忘记了getValues
函数。此外,请务必删除ViewHelper装饰器。
至于你的元素没有被找到,你需要将它添加到你的类路径然后可能
$this->addPrefixPath(
'Custom_Zend_Form_Element',
'Custom/Zend/Form/Element',
'element'
);