首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend框架的模型抽象和空值

Zend框架的模型抽象和空值
EN

Stack Overflow用户
提问于 2010-12-09 09:15:06
回答 1查看 739关注 0票数 1

我正在使用Zend的一些模型抽象类。

  • Default_Model_Abstract:包含每个值的__set和__get,以及一个setter和getter,并作为一个虚拟object.
  • Default_Model_AbstractMapper:包含方法,如__set()、find()、fetchall()等等。

几个月前,我在Zend文档中找到了这个解决方案。但是在过去的几个月里,我在处理空值时遇到了一些问题。

我有一个Zend_Form_Element_Select元素,它从数据库中得到它的值。它的值是来自外键的ID。因此,只接受有效的外键id或null。但是Zend_Form_Element_Select元素是可选的,因此有可能得到一个空字符串(->addMultiOption(null,“选择您的选项”))。但是这会给我一个错误,因为空字符串不是有效的外键id,也不是null,这也是允许的。

我的第一个注意事项是签入处理表单的控制器,如果select元素值是空字符串,并将其更改为null。这很难看,问题是,我的setter将null更改为0,因为我使用(int) $value验证它。

代码语言:javascript
复制
public function setId($value)
{
    $this->_id = (int) $value;
    return $this;
}

因此,另一种方法是我签入setter,如果值为null,则不使用(int)验证它。看起来会是这样的。

代码语言:javascript
复制
public function setId($value)
{
    if($value !== null)
        $this->_id = (int) $value;
    return $this;
}

在这种情况下,这是可行的,但我没有道理,因为有时我希望将一个现有值重置为null。所以我不能忽略setter中带有null的值。因此,另一种方法是:

代码语言:javascript
复制
public function setId($value)
{
    if($value !== null)
        $this->_id = (int) $value;
    else
        $this->_id = null;
    return $this;
}

但现在真的很难看。我很好奇你们会怎么解决这个问题。因为我认为必须有简单的解决方案,而不只是移除setter中的(int)。因为据我所见,这似乎是使用策划人的一种常见方式。

向你问好,妮可

EN

回答 1

Stack Overflow用户

发布于 2010-12-09 10:31:13

我想不出有什么其他方法能做到这一点--合乎逻辑。如果您发现这太冗长,您可以将if/else变成一个三元运算符表达式。这将使它成为一条单线线。

代码语言:javascript
复制
$this->_id = ($value !== NULL) ? (int) $value : NULL;
return $this;

另一种选择是将if/else移动到像NullOrInt这样的自定义Zend_Filter中。这可以在您需要此检查的任何地方重用,例如在控制器级别验证请求输入,或者在Zend_Form或您的设置器中使用,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4396524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档