Используя структуру Yii, каков был бы правильный способ обработки атрибута перед его отображением с помощью CHtml::activeTextField()?
Вопрос
Скажем, у меня есть эта строка кода в представлении.
<?php echo CHtml::activeTextField($model,'start_time'); ?>
start_time — это временная метка UNIX.Когда я просто отображаю его в представлении, я могу применять к нему такие функции, как date().Где мне следует применить форматирование при отображении его в форме, используя приведенную выше строку кода?(Этот случай временных меток/дат может быть особенным, но мне также интересно, как бы это было, если бы это не была дата, и я просто хочу работать с
«значение в базе данных» <> «разные представления значения в разных представлениях.
Спасибо =)
Решение
Мы обычно расширяем CActiveRecord::afterFind()
конвертировать данные в удобочитаемый формат и CActiveRecord::beforeValidate()
чтобы преобразовать его обратно.
Если вам нужно постоянно иметь доступ к более чем одному формату, вы можете попробовать геттеры и сеттеры Yii.
Имея оба
CActiveRecord::getFieldName()
иCActiveRecord::setFieldName($value)
позволяет вам поставить CHtml::activeTextField($model, 'fieldName')
в ваших взглядах.Очевидно, вы манипулируете базовым столбцом базы данных в этих методах (вероятно, в вашем случае это называется start_time).Надеюсь это поможет.
Другие советы
Я использовал CHtml::textField вместо CHtml::activeTextField следующим образом:
<?php echo CHtml::textField(get_class($model).'[start_time]', date('Y-m-d H:i', $model->start_time)); ?>
Посмотрим, сработает ли это в долгосрочной перспективе.
Точно так же вместо того, чтобы сразу применять метод даты, я мог бы использовать что-то вроде $model->getSomeProcessedData();Прохладный..:]
IMO, afterFind() замедлит ваш поиск, и я не думаю, что beforeValidate() играет какую-либо роль в отображении данных.Я предпочитаю добавлять getttart_time() в класс модели, чтобы переопределить метод получения значения start_time.Там ваш код форматирования запускается только тогда, когда вам нужно отобразить данные.