Symfony中有一些“最佳实践”来自定义表单错误? 例如,如果我需要在场地上显示“Campo obligatorio”。
1)我怎样才能以更好的方式做到并且独立于什么样的形式呢? 2)如何自定义消息'已存在具有相同“%namefield”的对象。 ?
由于
更新
抱歉,但是如果我试着'无效'你怎么说我......它给我打错了同样的错误$this->setValidator('urlres', new sfValidatorString(array(
'min_length' => 6,
), array(
'min_length' => 'URL must be longer',
'required' => 'Required field',
'invalid' => 'URL exist'
)));
打印我:
*已存在具有相同“urlres”的对象。
更新 菲利克斯,你的解决方案很棒,但它给我打印这个错误: “urlres:那个网址已经存在”
有没有办法删除“field:”??
由于
答案 0 :(得分:11)
也许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有所帮助,您还可以查看{{3}}。
答案 1 :(得分:0)
让我试着帮助你。
您可以在表单类的configure
方法中轻松自定义标准表单错误。这是一个例子:
1)
<?php
class myForm extends BaseMyForm
public function configure(){
parent::configure();
$this->setValidator(
'my_field' => new sfValidatorString(
array('min_length'=>3, 'max_length'=>32, 'required'=>true),
array('required' => 'Hey, this field is required!')
)
);
}
2)只需更改代码为“无效”的邮件。
您只需找到有效的消息代码即可自定义特定的默认消息。更多信息 - Symfony Forms in Action: Chapter 2 - Form Validation
<强>更新强>
如果您不想在所有表单类中自定义错误消息,只需创建自己的基本验证程序类:
abstract class myBaseValidator extends sfValidatorBase
并重新定义默认的“必填”和“无效”消息。
答案 2 :(得分:0)
有没有办法删除“字段:” ??
是:throw_global_error => true