我应该转换时间戳 ull值在我的模型之前,他们得到视图层


Should I convert timestamps ull values in my models before they get to the view layer?

这个问题是特定于zf2的,但我认为这也可能是一个更普遍的MVC问题。

我在我的mysql数据库中创建了一个列,我的应用程序使用(让我们说一个用户实体的描述字段),它被存储为字符串。此字段是可选的,如果该值从未被程序更改,则将其设置为null。

我正在使用zf2的表网关,所以我有这个表的模型。

现在在我的视图模板中,我检查值是否为空,如果它显示这个用户为"未输入",但我想知道我是否应该在模型中这样做?例如,在这个表的模型中,我检查值是否为空,并将其更改为"Not enter",这样我就可以从模板中删除这个逻辑。但缺点是,当我使用模型对表进行更新时,我可能不得不将其转换回null。

我现在对时间戳也是这样做的。我转换时间戳在我的模型日期字符串之前,他们得到视图层(也许我应该转换时间戳在我的视图模板代替吗?)

大多数zf2开发人员只是在视图模板中处理这个问题,或者在我没有看到的模型中这样做是否有一些优势

例如,在这个表的模型中,我检查值是否为null,并将其更改为"Not enter

"

这是典型的视图约束逻辑。现在你想要渲染"Not enter",也许在另一个UI中你想要显示其他东西。请记住,在视图中包含逻辑本身并不是一个坏主意,它应该只与视图相关。检查一个值是否可用,并相应地执行,这是完全可行的视图逻辑。

我现在对时间戳也是这样做的。我转换时间戳在我的模型日期字符串之前,他们得到视图层(也许我应该转换时间戳在我的视图模板代替吗?)

保持模型层域驱动:使用语义来描述你的域。如果要处理时间戳,PHP的DateTime类是一个很好的解决方案。使用这些对象,如果不存在,则将其设置为null。这样你可以保持你的模型层在一起。

一个完美可行的时间戳签名是:

public function setTimestamp(DateTime $timestamp = null) {
    //
}

这样你强制变量是一个有效的DateTime实例,或者你只允许null

你的视图层可以包含这样的逻辑:

<?php if ($object->getTimestamp() !== null): ?>
    <p><?= $object->getTimestamp()->format('c')?></p>
<?php endif ?>