【发布时间】:2011-02-28 03:46:24
【问题描述】:
我正在使用 Yii 构建一个 Web 应用程序。我的一个输入表单有一个 CJuiDatePicker 日期。我有两个下拉列表,一个用于小时,一个用于分钟。
我的问题出在数据模型中,我试图将表单中的日期、小时和分钟转换为 MySQL 日期时间字符串。我必须生成一个看起来像这样的日期时间字符串 - 2011-02-27 20:11:56,所以 Yii 可以将字符串转换为 MySQL 日期时间并将值插入到行中。
在模型中,我有一个如下所示的规则:
array('event_datetime_from', 'createDatetime',
'date'=>'event_date_from', 'hour'=>'event_hour_from',
'minute'=>'event_minute_from'),
createDateTime 验证器函数如下所示:
public function createDatetime($attribute, $params) {
if (!$this->hasErrors()) {
$date = $this->$params['date'];
$hour = $this->$params['hour'];
$minute = $this->$params['minute'];
if (trim($date) === '') {
$this->$attribute = null;
} else {
$parse = CDateTimeParser::parse(
$date.' '.$hour.':'.$minute,
'MM/dd/yyyy hh:mm');
$this->$attribute = date('Y-m-d H:i:s', $parse);
}
}
}
现在,我不是 PHP 开发人员。但是,在我看来$params['date'] 正在返回字符串值event_date_from,而不是event_date_from 的值。
我的 PHP 问题是,如何在 createDateTime 验证器函数中获取 event_date_from 的值?
如果我忽略了 Yii 文档中某处的答案,我深表歉意。我找不到很多验证器函数的例子。 Yii 验证器类的参数签名与验证器函数不同。
根据 thaddeusmt 的回答编辑:
我尝试扩展 CActiveRecord 并编写了一个 afterValidate 方法,但我找不到一个地方来定义我的工作日期、小时和分钟变量。我是在扩展方法中定义的,afterValidate方法是看不到的。在 afterValidate 方法中出现 PHP 未定义变量错误。
在控制器中,我编写了以下函数:
protected function createDateTime($dateString, $hour, $minute) {
if (trim($dateString) == '') {
return null;
} else {
$timeString = $dateString.' '.$hour.':'.$minute;
return date('Y-m-d H:i:s', strtotime($timeString));
}
}
在 PHP 中调用函数应该很容易吧?
我在 actionCreate() 函数中尝试了这两个调用:
$model->event_datetime_from =
createDateTime($_POST['event_date_from'],
$_POST['event_hour_from'],
$_POST['event_minute_from']
);
和:
$model->event_datetime_from =
createDateTime($model->event_date_from,
$model->event_hour_from,
$model->event_minute_from
);
我的控制器代码因这些调用中的任何一个而死,我得到一个空白(无 HTML)响应页面。
我认为我想做的事情很简单。我想获取日期、小时和分钟字符串,并将连接转换为日期时间字符串。我错过了什么?
【问题讨论】: