我正在使用Zend的一些模型抽象类。
几个月前,我在Zend文档中找到了这个解决方案。但是在过去的几个月里,我在处理空值时遇到了一些问题。
我有一个Zend_Form_Element_Select元素,它从数据库中得到它的值。它的值是来自外键的ID。因此,只接受有效的外键id或null。但是Zend_Form_Element_Select元素是可选的,因此有可能得到一个空字符串(->addMultiOption(null,“选择您的选项”))。但是这会给我一个错误,因为空字符串不是有效的外键id,也不是null,这也是允许的。
我的第一个注意事项是签入处理表单的控制器,如果select元素值是空字符串,并将其更改为null。这很难看,问题是,我的setter将null更改为0,因为我使用(int) $value验证它。
public function setId($value)
{
$this->_id = (int) $value;
return $this;
}因此,另一种方法是我签入setter,如果值为null,则不使用(int)验证它。看起来会是这样的。
public function setId($value)
{
if($value !== null)
$this->_id = (int) $value;
return $this;
}在这种情况下,这是可行的,但我没有道理,因为有时我希望将一个现有值重置为null。所以我不能忽略setter中带有null的值。因此,另一种方法是:
public function setId($value)
{
if($value !== null)
$this->_id = (int) $value;
else
$this->_id = null;
return $this;
}但现在真的很难看。我很好奇你们会怎么解决这个问题。因为我认为必须有简单的解决方案,而不只是移除setter中的(int)。因为据我所见,这似乎是使用策划人的一种常见方式。
向你问好,妮可
发布于 2010-12-09 10:31:13
我想不出有什么其他方法能做到这一点--合乎逻辑。如果您发现这太冗长,您可以将if/else变成一个三元运算符表达式。这将使它成为一条单线线。
$this->_id = ($value !== NULL) ? (int) $value : NULL;
return $this;另一种选择是将if/else移动到像NullOrInt这样的自定义Zend_Filter中。这可以在您需要此检查的任何地方重用,例如在控制器级别验证请求输入,或者在Zend_Form或您的设置器中使用,等等。
https://stackoverflow.com/questions/4396524
复制相似问题