symfony フォームで達成したいことはかなり簡単だと思います。その通りです。3 つの個別のウィジェットと 3 つの個別のバリデータが必要です。この正確な状況にすぐに使用できるソリューションはありません。
フォーム構成メソッドでは、次のようなものがあります。
$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(),
));
あなたが提案したように、オブジェクトに2つのプロパティがあると仮定しましょう。どちらも日時フィールドです。
アクションでは、日時フィールドを設定するために次のようなものがあります。
$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 を使用しないことです。通常のテキスト ボックス (中央揃え、最大長 = 5) を使用するだけで、sfValidatorTime バリデーターは引き続き完全に機能します。
それが役立つことを願っています。