自定义错误symfony

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:

要测试长度和唯一性,您应该使用sfValidatorAndsfValidatorDoctrineUnique:

$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.但我不确定这是否有效.

如果它对您有所帮助,您还可以查看源代码.