所以我創建了一個簡單的Zend_Form,我想以顯示它的元素之一是這樣的:文字環繞元素在Zend_Form中
Label: text [input] text2
我用LabelDecorator成功地添加標籤,我甚至可以使用DescriptionDecorator作爲descrption添加text1或text2,但我無法弄清楚如何添加它們兩個。我知道我可以添加兩個DescriptionDecorator,一個是前置的,另一個是附加的,但它們都具有相同的內容。
所以我創建了一個簡單的Zend_Form,我想以顯示它的元素之一是這樣的:文字環繞元素在Zend_Form中
Label: text [input] text2
我用LabelDecorator成功地添加標籤,我甚至可以使用DescriptionDecorator作爲descrption添加text1或text2,但我無法弄清楚如何添加它們兩個。我知道我可以添加兩個DescriptionDecorator,一個是前置的,另一個是附加的,但它們都具有相同的內容。
您可以創建自己的裝飾:
class My_Form_Decorator_PlainText extends Zend_Form_Decorator_Abstract
{
public function render($content)
{
return $content . $this->getOption('text');
}
}
,然後多次添加這個裝飾:
$this->addElement($this->createElement('text', 'fieldname')
->setLabel('Label')
->addPrefixPath('My_Form', 'My/Form/')
->setDecorators(array(
'Label',
array(array('before'=>'PlainText'), array('text' => 'hello')),
'ViewHelper',
array(array('after'=>'PlainText'), array('text' => 'world')),
)));
我已經結束了創建自定義表單裝飾:
<?php
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
class Zend_Form_Decorator_Surrounded extends Zend_Form_Decorator_Abstract
{
/**
* Render element
*
* @param string $content
* @return string
*/
public function render($content)
{
$options = $this->getOptions();
if(!isset($options['text'])) return $content;
return sprintf($options['text'], $content);
}
}
?>
我以這種方式使用它:
<?php
$element->setDecorators(array(
'ViewHelper',
'Errors',
array('Surrounded', array('text' => 'text1 %s text2')),
'HtmlTag',
));
?>
您認爲這是一個很好的解決方案嗎?它有什麼缺點嗎?
向我們顯示一些代碼?然後查看Zend_Form viewhelpers,然後輸出你喜歡的表單。 – Iznogood 2012-03-09 17:18:01
我不知道應該顯示什麼代碼...它只是像'$ element = $ form-> getElement('name');'和窗體本身是在ini文件中定義的。元素只是一個簡單的文本輸入。 Viewhelper似乎是某種答案,儘管它不會很靈活(如果我錯了,請糾正我,但我認爲我必須重寫默認viewhelper,我在整個系統中使用該方法)。 – zeroos 2012-03-13 10:07:52