Я думаю, что вы хотите достичь с помощью форм Symfony, довольно легко. Вы правы, вам нужны три отдельных виджета и три отдельных валидатора, для этой конкретной ситуации не существует готового решения.
В вашем методе настройки формы у вас будет что-то вроде:
$this->setWidgets(array(
'date' => new sfWidgetFormDate(),
'time_start' => new sfWidgetFormTime(array('label' => 'Start Time', 'with_seconds' => false)),
'time_finish' => new sfWidgetFormTime(array('label' => 'End Time', 'with_seconds' => false)
));
$this->setValidators(array(
'date' => new sfValidatorDate(), // by default outputs in format Y-m-d
'time_start' => new sfValidatorTime(), // by default outputs in format H:i:s
'time_finish' => new sfValidatorTime(),
));
Предположим, что у объекта есть два свойства, как вы и предполагали, оба являются полями даты и времени.
В вашем действии вам нужно что-то вроде следующего для установки полей даты и времени:
$values = $this->form->getValues();
$object->setStartDateTime(sprintf('%s %s', $values['date'], $values['time_start']));
$object->setFinishDateTime(sprintf('%s %s', $values['date'], $value['time_finish']));
Редактировать: другое предложение не использовать встроенный виджет времени sfWidgetFormTime, поскольку он может выглядеть довольно уродливо. Вы можете просто использовать обычное текстовое поле (выровненное по центру, с maxlength = 5), и валидатор sfValidatorTime все равно будет работать идеально.
Надеюсь, это поможет.