0

假设我在视图中有这行代码。

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

start_time 是一个 UNIX 时间戳。当只是在视图中显示它时,我可以在其上应用 date() 之类的函数。当我使用上面的代码行在表单中显示格式时,我应该在哪里应用格式?(这种时间戳/日期的情况可能很特殊,但我也很感兴趣,如果它不是一个日期,我只想与之合作

"数据库中的值" <> "不同视图中值的不同表示。

谢谢 =)

4

3 回答 3

1

我使用了 CHtml::textField 而不是 CHtml::activeTextField,如下所示:

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

从长远来看,我会看看这是否可行。

以同样的方式,而不是在那里应用日期方法,我可以有类似 $model->getSomeProcessedData(); 之类的东西。凉爽的.. :]

于 2010-03-13T19:39:13.310 回答
1

我们通常扩展CActiveRecord::afterFind()以将数据转换为人类可读的格式并将CActiveRecord::beforeValidate()其转换回来。

如果你需要不止一种格式,你可能想试试 Yii 的 getter 和 setter。

两者兼得

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

允许您提出CHtml::activeTextField($model, 'fieldName')您的意见。显然,您在这些方法中操作底层数据库列(在您的情况下显然它被称为 start_time)。希望这可以帮助。

于 2010-03-14T04:47:55.530 回答
0

IMO, afterFind() 让你减慢搜索速度,我认为 beforeValidate() 在显示数据中没有任何作用。我更喜欢将 getttart_time() 添加到模型类中以覆盖 start_time 值的 getter。只有当您需要显示数据时,您的格式化代码才会运行。

于 2010-06-12T06:21:01.070 回答