gpt4 book ai didi

forms - 自定义错误 symfony

转载 作者:行者123 更新时间:2023-12-02 06:11:34 24 4
gpt4 key购买 nike

在 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”的对象。

已更新Felix,你的解决方案很棒,但它向我打印了这个错误:“urlres:该 url 已经存在”

有没有办法删除“字段:”??

谢谢

最佳答案

也许 this form post帮助你:

放上代码

sfValidatorBase::setDefaultMessage('required', 'Field required');

在应用程序配置的“配置”中 apps/youApp/config/yourAppConfiguration.class.php

您应该能够通过这种方式为每种错误消息类型设置默认值。


如果你想为某些字段设置某些错误消息,可以考虑创建一个定义所有这些的表单类,让所有其他表单继承自这个。
然后,子类仅指定应显示哪些字段(可能还有自定义验证逻辑)。

您可以在 Admin Generator chapter 中找到如何执行此操作的示例symfony 的书。

恕我直言,这是最干净的方法。


编辑:

如果您想将字段留空,则必须添加 required => false 选项:

  'email'   => new sfValidatorEmail(array('required' => false))

关于错误消息:这听起来像是 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")
)
));

此外,您在字符串验证器中使用的 invalid 错误代码也不正确。您将无效消息设置为
URL 存在
但是string 验证器如何知道这一点?它只检查给定的字符串是否满足 min_lengthmax_length 条件。

顺便说一句,我假设您使用的是 Doctrine,但我认为相同的验证器可用于 Propel。


编辑 3:
设置选项 'throw_global_error' => false。但我不确定这是否有效。

您还可以查看 source code如果对您有帮助。

关于forms - 自定义错误 symfony,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2086543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com