Я использую Yii для создания веб-приложения. Одна из моих форм ввода имеет 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, как мне получить значение event_date_from
внутри функции валидатора createDateTime
?
Мои извинения, если я пропустил ответ где-нибудь в документации Yii. Я не смог найти много примеров функций валидатора. У классов валидаторов Yii сигнатура параметров отличается от функций валидатора.
Отредактировано на основе ответа thaddeusmt:
Я попытался расширить CActiveRecord и кодировать метод afterValidate, но не смог найти место для определения моей рабочей даты, часовых и минутных переменных. Я определил их в расширенном методе, а метод afterValidate не смог их увидеть. Я получил ошибку неопределенной переменной PHP в методе afterValidate.
В контроллере я кодировал следующую функцию:
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) страницу ответа.
Я думал, что то, что я хотел сделать, было довольно просто. Я хочу взять строку даты, часа и минуты и преобразовать конкатенацию в строку даты и времени. Чего мне не хватает?