也许this form post帮助你:
把代码
sfValidatorBase::setDefaultMessage('required', 'Field required');
在你的应用程序配置apps/youApp/config/yourAppConfiguration.class.php
的 “配置”。
您应该能够以这种方式为每个错误消息类型设置默认值。
如果你要为某些领域的某些错误信息,想创建一个窗体类,定义了这一切,让所有其他形式从这个继承。
然后,子类只指定应显示哪些字段(也可能是自定义验证逻辑)。
你可以在symfony书的Admin Generator chapter中找到一个例子。
这是最干净的方法恕我直言。
编辑:
如果你想离开领域的空白,你必须添加required => false
选项:
'email' => new sfValidatorEmail(array('required' => false))
关于错误信息:这听起来像urlres
被标记为数据库表中唯一的值已存在。也许你应该检查数据库模式定义。
编辑2:
来测试,长度和唯一性,你应该使用sfValidatorAnd
和sfValidatorDoctrineUnique
:
$this->setValidator('urlres', new sfValidatorAnd(
array(
new sfValidatorString(
array('min_length' => 6,),
array('required' => 'Required field',
'min_length' => 'URL must be at least %min_length% chars long.')
),
new sfValidatorDoctrineUnique(
array('model' => 'yourModel',
'column' => 'theColumn',
'primary_key' => 'thePrimaryKeyColumn',
'throw_global_error' => false),
array('invalid' => "That URL already exists")
)
));
而且你在字符串验证的invalid
错误代码的使用是不正确的。您将无效消息设置为 URL exists
但字符串验证程序如何知道这个?它只检查给定的字符串是否符合min_length
,max_length
条件。
顺便说一句我假设你使用Doctrine,但我认为相同的验证器可用于Propel。
编辑3:
设置选项'throw_global_error' => false
。但我不确定这是否有效。
你也可以看看source code如果它可以帮助你。
感谢Felix,它工作正常,它是一种干净的方法来做我想做的事。 你能帮我解决:“一个具有相同”urlres“的对象已经存在。”错误?我必须捕获哪些错误类型才能定制此错误消息? 非常感谢。 – nebur85 2010-01-20 11:34:08
而另一个问题是......只有在填充字段时才有可能验证字段?在我的表单中,我可以填写电子邮件地址或电话号码......但要验证电子邮件地址,我需要将sfValidatorEmail分配给电子邮件字段...如果我这样做,他们会提出'无效'错误... – nebur85 2010-01-20 12:19:28
是felix,是独特的。所以我必须阅读之前插入显示自定义错误? 谢谢 – nebur85 2010-01-20 15:45:07