假设我在视图中有这行代码。
<?php echo CHtml::activeTextField($model,'start_time'); ?>
start_time 是一个 UNIX 时间戳。当只是在视图中显示它时,我可以在其上应用 date() 之类的函数。当我使用上面的代码行在表单中显示格式时,我应该在哪里应用格式?(这种时间戳/日期的情况可能很特殊,但我也很感兴趣,如果它不是一个日期,我只想与之合作
"数据库中的值" <> "不同视图中值的不同表示。
谢谢 =)
我使用了 CHtml::textField 而不是 CHtml::activeTextField,如下所示:
<?php echo CHtml::textField(get_class($model).'[start_time]', date('Y-m-d H:i', $model->start_time)); ?>
从长远来看,我会看看这是否可行。
以同样的方式,而不是在那里应用日期方法,我可以有类似 $model->getSomeProcessedData(); 之类的东西。凉爽的.. :]
我们通常扩展CActiveRecord::afterFind()
以将数据转换为人类可读的格式并将CActiveRecord::beforeValidate()
其转换回来。
如果你需要不止一种格式,你可能想试试 Yii 的 getter 和 setter。
两者兼得
CActiveRecord::getFieldName()
和CActiveRecord::setFieldName($value)
允许您提出CHtml::activeTextField($model, 'fieldName')
您的意见。显然,您在这些方法中操作底层数据库列(在您的情况下显然它被称为 start_time)。希望这可以帮助。
IMO, afterFind() 让你减慢搜索速度,我认为 beforeValidate() 在显示数据中没有任何作用。我更喜欢将 getttart_time() 添加到模型类中以覆盖 start_time 值的 getter。只有当您需要显示数据时,您的格式化代码才会运行。