2

所以我創建了一個簡單的Zend_Form,我想以顯示它的元素之一是這樣的:文字環繞元素在Zend_Form中

Label:  text [input] text2 

我用LabelDecorator成功地添加標籤,我甚至可以使用DescriptionDecorator作爲descrption添加text1或text2,但我無法弄清楚如何添加它們兩個。我知道我可以添加兩個DescriptionDecorator,一個是前置的,另一個是附加的,但它們都具有相同的內容。

+0

向我們顯示一些代碼?然後查看Zend_Form viewhelpers,然後輸出你喜歡的表單。 – Iznogood 2012-03-09 17:18:01

+0

我不知道應該顯示什麼代碼...它只是像'$ element = $ form-> getElement('name');'和窗體本身是在ini文件中定義的。元素只是一個簡單的文本輸入。 Viewhelper似乎是某種答案,儘管它不會很靈活(如果我錯了,請糾正我,但我認爲我必須重寫默認viewhelper,我在整個系統中使用該方法)。 – zeroos 2012-03-13 10:07:52

回答

0

您可以創建自己的裝飾:

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')), 
     ))); 
0

我已經結束了創建自定義表單裝飾:

<?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', 
)); 
?> 

您認爲這是一個很好的解決方案嗎?它有什麼缺點嗎?