使用 Yii 框架,在使用 CHtml::activeTextField() 显示属性之前处理属性的正确方法是什么
题
假设我在视图中有这行代码。
<?php echo CHtml::activeTextField($model,'start_time'); ?>
start_time 是 UNIX 时间戳。当仅在视图中显示它时,我可以在其上应用 date() 等函数。当我使用上面的代码行在表单中显示格式时,应该在哪里应用格式?(时间戳/日期的这种情况可能很特殊,但我也感兴趣的是,如果它不是日期,我只想与
“数据库中的值”<>“不同视图中值的不同表示。
谢谢=)
解决方案
我们一般会延长 CActiveRecord::afterFind()
将数据转换为人类可读的格式并且 CActiveRecord::beforeValidate()
将其转换回来。
如果您始终需要多种可用格式,您可能想尝试一下 Yii 的 getter 和 setter。
两者兼具
CActiveRecord::getFieldName()
和CActiveRecord::setFieldName($value)
允许你把 CHtml::activeTextField($model, 'fieldName')
在你看来。显然,您在这些方法中操作底层数据库列(显然在您的情况下它被称为 start_time )。希望这可以帮助。
其他提示
我使用了CHtml ::文本字段代替了CHtml :: activeTextField这样的:
<?php echo CHtml::textField(get_class($model).'[start_time]', date('Y-m-d H:i', $model->start_time)); ?>
我会看看是否能在长期内工作了。
在以相同的方式而不是施加日期方法在那里,我可以有不便如$模型 - > getSomeProcessedData();酷..:
IMO,一个afterFind()让你搜索慢下来,我不认为beforeValidate()中显示的数据起到任何作用。我喜欢加入getttart_time()到模型类重写START_TIME值的消气。有您的格式的代码,只有当你需要显示的数据运行。
不隶属于 StackOverflow