0

我有一个数据库表,其中包含各种类型的各种列,包括一些可能重要或不重要的十进制类型列。我从数据库中读取了一条记录,并通过 error_log 使用 serialize($dbArray) 输出了结果关联数组,我可以清楚地看到这些列有一个“N”,表示它们包含一个 NULL 值。在 $form->populate($dbArray) 中使用相同的数组来“填充”表单。提交后,我再次将 error_log 与 serialize($dbArray) 一起使用,并且有问题的列现在将 'S(1):0' 作为序列化输出的值部分。

这对我来说是一个问题,因为我有一个大于 0 的验证器,当我没有向该特定元素添加任何值时,当我期望它通过时,它会失败。这些元素不是必需的元素,只应在输入某些内容时运行验证器,并且由于未返回 NULL,因此它会运行。NULL 值在某处转换为 0,随后在 DB 中转换为 0.00。

知道我需要做什么才能让表单在没有输入任何内容时返回 NULL 元素。我将元素定义为“文本”类型,用于大多数这种性质的元素。来自同一 DB 记录的 varchars 返回为 NULL,我想我记得一个日期列也保持 NULL 值。这些也是表单中的“文本”元素。

明天我会回来并进行更多调试,但是任何关于可能导致这种情况的想法都将不胜感激。

4

1 回答 1

0

我发现这可以通过使用过滤器(Zend_Filter)来处理,我现在正在这样做。当我让它工作时,我会返回并指定详细信息,如果我失败了,那么我想这可能是另一个问题。

好的,所以过滤器起作用了。基本上,在我定义我的元素的地方,我只需要添加一个

->addFilter('Null')

这会导致 getValue 或 getValues 返回 NULL 而不是空字符串或 0,这正是我所需要的。有许多变量/列类型,此过滤器将转换为 NULL,它表示它的工作方式基本上与 php empty() 函数的工作方式相同,当空返回 true 时,此过滤器将返回 NULL,否则返回内容像他们那样。

我希望这可以帮助某人避免我不得不投入的研究时间。

于 2013-07-11T12:04:43.943 回答