Как отформатировать вывод Rowset Zend_db? - PullRequest
0 голосов
/ 16 мая 2010

У меня есть модель, которая ссылается на таблицу реестры , расширяющую Zend_Db , и некоторые методы, которые постоянно используют fetchAll().

Что происходит: в моей таблице есть поле DATE , и я хотел бы, чтобы оно выводилось уже в формате, когда я вызываю $ row-> reg_date. Возможно ли что-то сделать в модели или мне нужно вручную отформатировать?

Ответы [ 2 ]

1 голос
/ 16 мая 2010

У вас есть несколько вариантов:

  • Перезаписать Zend_Db_Table_Row_Abstract::__get() в вашей таблице при запросе reg_date
  • Отформатируйте его в представлении с помощью собственного помощника вида, например, <?= $this->formatDate($this->row->reg_date, 'fancy'); ?>

Doctrine, вероятно, имеет ответ, который вы хотели бы получить, следующее вырезано из http://www.doctrine -project.org / Documentation / manual / 1_2 / ru / Знакомство с моделями # generation-models :

class User extends BaseUser
{
    public function setPassword($password)
    {
        return $this->_set('password', md5($password));
    }
}

$user = new User();
$user->username = 'jwage';
$user->password = 'changeme';

echo $user->password; // outputs md5 hash and not changeme

На вашем месте , я бы выбрал вспомогательную опцию просмотра. Вы можете добавить туда собственный CSS и все это готово к работе. Если вам нужно изменить его, вы измените его в одном месте, и ваше приложение будет обновлено.

Кроме того, если вы когда-нибудь хотели что-то сделать с датой (сравнить ее с другой датой, получить только месяц, локализовать ее и т. Д.), Вам нужна чистая начальная точка , которая вам нужна. d хранить в базе данных (то есть 2010-05-16 или 2010-05-16 16:55:00). Следовательно: настройки просмотра принадлежат виду.

0 голосов
/ 16 мая 2010

Я бы настоятельно рекомендовал не форматировать дату таким образом. Ваше требование к форматированию даты может измениться в какой-то момент в будущем, что потребует внесения изменений в пользовательские классы доступа к БД. Пользовательское форматирование этого типа действительно должно быть сделано в представлении, ИМХО.

Если вам нужно просто сделать это (а я уже делал подобные вещи, к сожалению, потом), вы захотите расширить Zend_Db_Table_Row и выполнить свое пользовательское форматирование там. Размещение вашего пользовательского форматирования в подклассе уменьшит ущерб в будущем;) Как сказал Челмерц, вы, вероятно, переопределите __get(), проверьте на reg_date и примените пользовательское форматирование в этой точке.

...