2010-03-13 16 views
0

說我在視圖中有這行代碼。使用Yii框架,在使用CHtml :: activeTextField()顯示它之前處理屬性的正確方法是

<?php echo CHtml::activeTextField($model,'start_time'); ?> 

start_time是UNIX時間戳。當在視圖中顯示它時,我可以在其上應用像date()這樣的函數。通過使用上面的代碼行,我應該在應用格式時在哪裏顯示格式? (時間戳/日期的這種情況可能是特殊的,但我也有興趣在如何將一個去,如果它是不是約會,我只是想

「數據庫值」工作<> 「不同的表示不同意見的價值

感謝=)

回答

1

我們通常擴展CActiveRecord::afterFind()將數據轉換爲人類可讀的格式和CActiveRecord::beforeValidate()將其轉換回來。

如果您需要不止一種格式可用,您可能需要試試Yii的getter和setter。

有兩個

  • CActiveRecord::getFieldName()
  • CActiveRecord::setFieldName($value)

允許你把CHtml::activeTextField($model, 'fieldName')你的看法。顯然,你在這些方法中操縱底層數據庫列(顯然它在你的情況下稱爲start_time)。希望這可以幫助。

+0

真棒,完美,我應該仔細閱讀文檔。謝謝! – Karolis 2010-03-14 12:18:59

1

我用了CHtml ::文本框代替了CHtml :: activeTextField這樣的:

<?php echo CHtml::textField(get_class($model).'[start_time]', date('Y-m-d H:i', $model->start_time)); ?> 

我會看看,如果這從長遠來看是成功的。以同樣的方式,而不是在那裏應用日期方法,我可能會像$ model-> getSomeProcessedData();冷.. ..]

0

IMO,afterFind()讓你減慢搜索速度,我不認爲beforeValidate()在顯示數據中扮演任何角色。我更喜歡將getttart_time()添加到模型類中以覆蓋start_time值的getter。您的格式化代碼僅在需要顯示數據時運行。

相關問題