我想从我的模型中指定一个字段的输出,所以我添加了一个date
键到我的$_schema
:
models/Tags.php
<?php
protected $_schema = array(
'id' => array('type' => 'integer', 'key' => 'primary'),
'title' => array('type' => 'string'),
'created' => array('type' => 'integer', 'date' => 'F jS, Y - g:i a'),
'modified' => array('type' => 'integer')
);
?>
我将时间作为无符号整数存储在 db 中(的输出time()
)。
我希望我的基本模型格式化任何具有date
输出键的字段。我认为最好的地方是在之后find
:
extensions/data/Model.php
<?php
static::applyFilter('find', function($self, $params, $chain) {
$schema = $self::schema();
$entity = $chain->next($self, $params, $chain);
foreach ($schema as $field => $options) {
if (array_key_exists('date', $options)) {
//format as a date
$params['data'][$field] = $entity->formatDate($field, $options['date']);
}
}
return $entity;
});
public function formatdate($entity, $field, $format, $timezone = 'Asia/Colombo') {
$dt = new \DateTime();
$tz = new \DateTimeZone($timezone);
$dt->setTimestamp($entity->$field);
$dt->setTimezone($tz);
return $dt->format($format);
}
?>
这似乎不起作用。当我执行 find all 时,这个过滤器似乎被命中了两次。第一次,$entity
包含一个count()
结果,只有在第二次命中时,它才包含该Records
对象。
我究竟做错了什么?我该如何改变它,以便<?= $tag->created; ?>
在我的视图中简单地按照我想要的方式格式化日期?从本质上讲,这需要是某种“后过滤器”。
编辑
如果我能找到一种访问当前模型实体对象的方法(不是完整的命名空间路径,$self 包含它),我可能可以解决我的问题。