當使用Zend_Form時,如果元素無效,則表單通過無序列表返回錯誤。我如何改變這個使用段落標籤呢?如何更改Zend_View_Helpers_FormErrors使用的標籤?
我試圖爲元素加載錯誤裝飾器,並調用setOptions()來傳遞一堆標籤來替換Zend_Form_Decorator_FormErrors使用的ul/li東西,但這並沒有工作= /相反Zend_Form_Decorator_Errors只是把選項作爲ul標籤中的屬性/值對。
當使用Zend_Form時,如果元素無效,則表單通過無序列表返回錯誤。我如何改變這個使用段落標籤呢?如何更改Zend_View_Helpers_FormErrors使用的標籤?
我試圖爲元素加載錯誤裝飾器,並調用setOptions()來傳遞一堆標籤來替換Zend_Form_Decorator_FormErrors使用的ul/li東西,但這並沒有工作= /相反Zend_Form_Decorator_Errors只是把選項作爲ul標籤中的屬性/值對。
而不是擴展錯誤裝飾器我已經擴展了formErrors視圖幫助器,讓它接受並處理數組中的選項。該formErrors視圖助手已經制定者,讓我改變標籤使用:
class My_View_Helper_FormErrors extends Zend_View_Helper_FormErrors
{
public function formErrors($errors, array $options = null)
{
if(key_exists('htmlElementStart', $options))
{
$this->setElementStart($options['htmlElementStart']);
unset($options['htmlElementStart']);
}
if(key_exists('htmlElementEnd', $options))
{
$this->setElementEnd($options['htmlElementEnd']);
unset($options['htmlElementEnd']);
}
if(key_exists('htmlElementSeparator', $options))
{
$this->setElementSeparator($options['htmlElementSeparator']);
unset($options['htmlElementSeparator']);
}
return parent::formErrors($errors, $options);
}
}
將選項傳遞,我得到了它的錯誤裝飾和setOptions():
$element->getDecorator()->setOptions(
array(
'class' => 'error',
'htmlElementStart' => '<p%s>',
'htmlElementEnd' => '</p>',
'htmlElementSeparator' => '<br/>'
)
);
,並告訴元素加載幫手路徑:
$element->getView()->addHelperPath('My/View/Helper', 'My_View_Helper');
不幸的是,你不能通過傳遞一堆選項來改變輸出格式。 如果你想改變這種行爲,你別無選擇,只能編寫你自己的Errors裝飾器(很可能是原始Errors裝飾器的派生物)。這個新的裝飾器必須覆蓋render()
方法,以便能夠調用你自己的視圖幫助器(而不是ZF默認使用的formErrors
幫助器)。
我已經得出同樣的結論,並已開始這樣做。我會讓你知道我如何繼續。 – 2011-01-31 20:31:15