2011-02-11 71 views
1

对于一个形式,我用下面的代码每个输入字段/ Zend的形式显示错误:Zend的形式显示了所有的错误上面

class Application_Form_User_Register extends Zend_Form 
{ 
    public function init() 
    { 
     $email = new Zend_Form_Element_Text('email'); 
     $email->setLabel('Email adres: (*)') 
     ->setRequired(true) 
     ->addErrorMessage('Het veld Email adres is verplicht') 
     ->addValidator('StringLength', false,array(6,100)) 
     ->addErrorMessage('Het email adres dient uit minstens 6 karakters te bestaan') 
     ->addValidator('EmailAddress') 
     ->addErrorMessage('Het veld Email adres moet een geldig email adres bevatten') 
     ->addFilter('StringTrim'); 
     $this->addElement($email); 
    } 
} 

当我从张贴这种形式的一个错误的电子邮件地址,它会显示所有3错误消息。

例如:如果我发布“thisisa @ nonvalidadress”,它会显示所有错误,包括错误“电子邮件地址至少应为6个字符”。

有没有办法改变这种行为?

然后第二个问题......有没有办法显示相应输入字段上方的错误信息? 默认情况下,错误消息显示在下方。

回答

1

addValidator()方法的第二个参数是breakChainOnFailure metacommand。只要设置为true即可。所以,你会做

class Application_Form_User_Register extends Zend_Form 
{ 
public function init() 
{ 
    $email = new Zend_Form_Element_Text('email'); 
    $email->setLabel('Email adres: (*)') 
    ->setRequired(true) 
    //->addErrorMessage('Het veld Email adres is verplicht') 
    ->addValidator('StringLength', true, array(6,100)) 
    //->addErrorMessage('Het email adres dient uit minstens 6 karakters te bestaan') 
    ->addValidator('EmailAddress', true) 
    //->addErrorMessage('Het veld Email adres moet een geldig email adres bevatten') 
    ->addFilter('StringTrim'); 
    $this->addElement($email); 
} 

}

这将打破校验器链,如果它失败了。

下面是Zend框架的网站约自定义的验证消息说: 有些开发者可能想为校验器提供定制的错误消息提供定制的校验错误消息:

注意。 Zend_Form_Element :: addValidator()方法的$ options参数允许您通过提供键“消息”并将其映射到用于设置消息模板的键/值对数组来实现此目的。您需要知道特定验证器的各种验证错误类型的错误代码。 更好的选择是在表单中使用Zend_Translate_Adapter。错误代码通过默认的Errors修饰器自动传递给适配器;您可以通过为验证器的各种错误代码设置翻译来指定您自己的错误消息字符串。

有关详细信息,请参阅本:http://framework.zend.com/manual/en/zend.form.elements.html

你的第二个问题,改变在错误信息出现时,需要对这些表单元素定制装饰。你绝对可以做到这一点,并不像起初看起来那么困难。这篇文章确实帮助我理解了装饰器:http://devzone.zend.com/article/3450

+0

谢谢你的回复,不幸的是addValidator设置中的真正选项,不是溶剂。错误仍然显示:( – Arthur 2011-02-11 21:35:12

1

Sudol是正确的,通过breakChainOnFailure参数,以防止在第一次失败后停止验证。

但你的问题是在你调用元素的方法addErrorMessage()。此方法设置将在元素验证失败时显示的错误消息,但它不指定消息和失败的验证程序之间的任何连接。这就是为什么每次您的验证器失败时都会收到全部三条消息。

所以你需要做的是为每个验证器而不是元素指定错误消息。

$emailValidator = new Zend_Validate_EmailAddress(); 
$emailValidator->setMessage('Het veld Email adres moet een geldig email adres bevatten'); 

$email->addValidator($emailValidator); 

或者,你可能想使用Zend_Translate为翻译标准的错误消息。

2

首先问题得到解答。第二个应该沿着这条线:

$element->getDecorator('Errors')->setPlacement('prepend');