有一种简单的方法可以禁用Zend_Form错误吗?

Mat*_*ick 2 php zend-framework zend-form

我正在使用Zend Framework.对于特定表单,没有足够的空间来显示表单元素旁边的错误.相反,我希望能够在表单上方显示错误.我想我可以通过传递$form->getErrorMessages()到视图来完成此操作但是如何禁用每个元素显示的错误消息?

小智 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.....
Run Code Online (Sandbox Code Playgroud)

然后,您可以在使用表单的任何地方决定如何显示消息(如果您计划将其显示在表单之外).当然,如果它们应该是表单的一部分,只需创建一个合适的装饰器并将其添加到上面的form-element init方法中.是一个关于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');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面使用的priorityMessenger-helper可以在这里找到:http://emanaton.com/code/php/zendprioritymessenger