validation - Doctrine PHP 1.2 - 如何跳过空字段的唯一验证

标签 validation doctrine-1.2

我有一个具有独特字段的模型,如下所示。问题是该字段是可选的,当它为空时,我会收到学说的独特错误消息。

我期望它只是验证“notnull”=> true 字段的唯一性。

$this->hasColumn('filename', 'string', 40, array(
     'type' => 'string',
     'unique' => true,
     'length' => '40',
 ));

提前谢谢您。

编辑:我禁用了验证,看起来该字段携带空白字符串而不是 null:

SQLSTATE[23000]:违反完整性约束:1062 键“文件名”的重复条目“”

所以现在的问题是:如何在空白值上强制执行 null 值...

编辑2:我这样做是为了解决问题。 =/

public function preValidate()
{
    if(!$this->filename) {
        $this->filename = null;
    }
}

最佳答案

扩展表单并使用您自己的自定义方法覆盖帖子验证器可能是一个更好的主意:

您可以将其放入 FileForm(或任何您的表单名称)中:

$this->validatorSchema->setPostValidator(
  new myValidatorDoctrineUniqueWithNull(array('model' => 'File', 'column' => array('filename')))
);

然后您将创建自己的验证器(如上面所定义),如下所示:

class myValidatorDoctrineUniqueWithNull extends sfValidatorDoctrineUnique
{
  protected function doClean($values)
  {
    // if the user passes an empty value, assume it must be null in the database
    // which is an allowed "non-unique" value.
    $column = $this->getOption('column');
    if (!$values[$column])
    {
      return $values;
    }

    return parent::doClean($values);
  }
}

如果您构建了一个验证器,那么如果您再次遇到这种情况,它是可以重新使用的。

关于validation - Doctrine PHP 1.2 - 如何跳过空字段的唯一验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8294751/

相关文章:

security - drools电子表格-电子表格规则的输入验证

javascript - 是否可以使用 Robot Framework 验证 Bootstrap 的约束验证文本?

php - 如何使 Doctrine_Expression ( Doctrine 1.2 ) 尝试获取最后 7 天

php - 将 "with\"替换为 Dotrine 1.2

php - 学说 1.2 性能,创造大量记录(~5000)

Javascript 正则表达式 - 使用允许列表的非法字符

python - 需要帮助理解 sklearn python 中的 cross_val_score

java - Struts2 INPUT 结果 : how does it work? 如何处理转换/验证错误?

php - 迭代某个字段排序的 Doctrine Collection

php - 选择一列 Doctrine DQL