您可以創建一個自定義裝飾器。
App_Form_Decorator_AdditionalError
extends Zend_Form_Decorator_Abstract
{
protected $_options = array(
'additionalError' => 'ERROR'
);
public function render($content)
{
$element = $this->getElement();
if($element->isErrors())
{
$element->addError($this->getOption('additionalError'));
}
return $content;
}
}
但是,這隻會將一個額外的錯誤推送到錯誤堆棧。您可以通過實際添加或附加錯誤到$content
而不用簡單地將其添加到addError()
中來獲得更多幻想。 (也許擴展HtmlTag
裝飾者而不是裝飾者Abstract
)。但我現在懶得做出完整的例子。抱歉。也許我明天會回到這個。希望這有助於/激勵你。
BTW;上述用法是:
$this->setDecorators(array(
array(
'AdditionalError',
array('additionalError' => 'Some additional error message')
)
'FormErrors',
// etc.
編輯:
好了,所以我有一個良好的睡眠,這裏是一個更好的建議。它延伸Desciption
以利用已定義的選項,如tag
,escape
等。它甚至可翻譯(耶!:))。這個增加了一個setError
選項並覆蓋了render
方法。
雖然未經測試,所以您可能會遇到一些錯誤和/或語法錯誤。
class App_Form_Decorator_AdditionalError
extends Zend_Form_Decorator_Description
{
protected $_error = 'error';
public function setError($error)
{
$this->_error = (string) $error;
return $this;
}
public function getError()
{
if(null !== ($error = $this->getOption('error')))
{
$this->setError($error);
$this->removeOption('error');
}
return $this->_error;
}
public function render($content)
{
$element = $this->getElement();
$view = $element->getView();
if(!$element->isErrors() || null === $view)
{
return $content;
}
$error = $this->getError();
$error = trim($error);
if(!empty($error) && (null !== ($translator = $element->getTranslator())))
{
$error = $translator->translate($error);
}
if(empty($error))
{
return $content;
}
$separator = $this->getSeparator();
$placement = $this->getPlacement();
$tag = $this->getTag();
$class = $this->getClass();
$escape = $this->getEscape();
$options = $this->getOptions();
if($escape)
{
$error = $view->escape($error);
}
if(!empty($tag))
{
require_once 'Zend/Form/Decorator/HtmlTag.php';
$options[ 'tag' ] = $tag;
$decorator = new Zend_Form_Decorator_HtmlTag($options);
$error = $decorator->render($error);
}
switch($placement)
{
case self::PREPEND:
return $error . $separator . $content;
case self::APPEND:
default:
return $content . $separator . $error;
}
}
}
用法:
public function init()
{
$this->addPrefixPath('App_Form', 'App/Form'); // or any other namespace you will use
$this->setDecorators(array(
'FormErrors',
'FormElements',
array(
'AdditionalError',
array('error' => 'You messed up! :)', 'placement' => 'prepend', 'tag' => 'div', 'class' => 'additional-error')
),
array(
'HtmlTag',
array('tag' => 'dl', 'class' => 'zend_form')
),
'Form'
));
}
編輯2:
我現在已經測試過它,並刪除語法錯誤和錯誤。似乎現在按預期工作。
我希望它顯示在形式eveytime之上的常見字符串有一個錯誤..我不是在談論個別元素的錯誤消息。 希望它在上面說:「HEY HEY BELOW ARE ERRORS」作爲一個單獨的字符串 – jayjay 2011-03-30 17:58:35