Используя структуру Yii, каков был бы правильный способ обработки атрибута перед его отображением с помощью CHtml::activeTextField()?

StackOverflow https://stackoverflow.com/questions/2437045

  •  19-09-2019
  •  | 
  •  

Вопрос

Скажем, у меня есть эта строка кода в представлении.

<?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.Там ваш код форматирования запускается только тогда, когда вам нужно отобразить данные.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top