neb*_*r85 2 forms customization symfony1
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'
)));
Run Code Online (Sandbox Code Playgroud)
打印我:*已存在具有相同"urlres"的对象.
更新了 Felix,你的解决方案太棒了但它给我打印了这个错误:"urlres:那个url已经存在"
有没有办法删除"字段:"??
谢谢
Fel*_*ing 11
也许这篇表格帖子可以帮助你:
把代码
sfValidatorBase::setDefaultMessage('required', 'Field required');
Run Code Online (Sandbox Code Playgroud)
在您的应用程序配置的"配置"中apps/youApp/config/yourAppConfiguration.class.php.
您应该能够以这种方式为每个错误消息类型设置默认值.
如果要为某些字段设置某些错误消息,请考虑创建一个定义所有这些的表单类,并让所有其他表单继承此字段.
然后,子类仅指定应显示哪些字段(可能还有自定义验证逻辑).
您可以在symfony书的Admin Generator章节中找到如何执行此操作的示例.
这是恕我直言最干净的做法.
编辑:
如果要将保留字段留空,则必须添加required => false选项:
'email' => new sfValidatorEmail(array('required' => false))
Run Code Online (Sandbox Code Playgroud)
关于错误消息:这听起来像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")
)
));
Run Code Online (Sandbox Code Playgroud)
您invalid在字符串验证器中使用错误代码也不正确.您将无效消息设置为
URL exists 但字符串验证器如何知道这一点?它只是检查给定字符串是否符合min_length,max_length标准或没有.
顺便说一下,我假设您使用了Doctrine,但我认为Propel可以使用相同的验证器.
编辑3:
设置选项'throw_global_error' => false.但我不确定这是否有效.
如果它对您有所帮助,您还可以查看源代码.