我正在使用Zend Framework。对于特定表单,没有足够的空间来显示表单元素旁边的错误。相反,我希望能够在表单上方显示错误。我想我可以通过将$form->getErrorMessages()
传递给视图来完成此操作但是如何禁用每个元素显示的错误消息?
答案 0 :(得分:5)
上述提案未考虑默认装饰器可能会更改。除了清除装饰器然后重新应用除了你不需要的装饰器之外,最好在表单初始化时禁用你不需要的装饰器,例如:
class My_Form_Login extends Zend_Form
{
public function init()
{
$this->setMethod('post');
$username = new Zend_Form_Element_Text('auth_username');
$username->setLabel('Username')
->setRequired(true)
->addValidator('NotEmpty')
->removeDecorator('Errors')
->addErrorMessage("Please submit a username.");
etc.....
然后,无论您何时使用表单,都可以决定如何显示消息(如果您计划将其显示在表单之外)。当然,如果它们应该是表单的一部分,只需创建一个合适的装饰器并将其添加到上面的form-element init方法中。 Here是一个很好的ZendCasts.com表单装饰器教程
除了表单本身之外显示消息的示例。
$elementMessages = $this->view->form->getMessages();
// if there actually are some messages
if (is_array($elementMessages))
{
foreach ($elementMessages as $element)
{
foreach ($element as $message)
{
$this->view->priorityMessenger($message, 'notice');
}
}
}
上面使用的priorityMessenger-helper可以在这里找到:http://emanaton.com/code/php/zendprioritymessenger
答案 1 :(得分:4)
您可以使用setElementDecorators
添加装饰器以表单元素。 Zend_Form
有一个名为init
loadDefaultDecorators
之后的函数。在您的子类中,您可以像这样覆盖它:
/**
* Load the default decorators for forms.
*/
public function loadDefaultDecorators()
{
// -- wipe all
$this->clearDecorators();
// -- just add form elements
// -- this is the default
$this->setDecorators(array(
'FormElements',
array('HtmlTag', array('tag' => 'dl')),
'Form'
));
// -- form element decorators
$this->setElementDecorators(array(
"ViewHelper",
array("Label"),
array("HtmlTag", array(
"tag" => "div",
"class" =>"element",
)),
));
return $this;
}
假设您在init
中添加了元素,将这些装饰器应用于表单中的每个元素。你会注意到setElementDecorators
中缺少“错误”装饰器。您也可以尝试循环遍历表单元素并使用removeDecorator
删除错误装饰器。