Я хотел указать вывод поля из моей модели, поэтому я добавил ключ 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')
);
?>
Я храню свое время как целое число без знака в БД (вывод 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);
}
?>
Кажется, это не работает. Когда я выполняю поиск всех, этот фильтр, кажется, получает удар дважды. В первый раз $entity
содержит count()
результатов и только при втором попадании содержит объект Records
.
Что я делаю не так? Как я могу изменить это так, чтобы простое выполнение <?= $tag->created; ?>
на мой взгляд форматировало дату так, как я хочу? По сути, это должно быть своего рода «после фильтра».
EDIT
Если мне удастся найти способ доступа к объекту сущности текущей модели (а не к полному пути в пространстве имен, который содержит $ self), я, вероятно, смогу решить мою проблему.