Я создаю форму оплаты с помощью symfony 1.4, и в моей форме определен виджет даты, подобный этому, так что пользователь может выбрать дату окончания срока действия своей кредитной карты:
new sfWidgetFormDate(array(
'format' => '%month%/%year%',
'years' => array_combine(range(date('Y'), date('Y') + 5), range(date('Y'), date('Y') + 5))
Обратите внимание на отсутствие% day% в формате, как в большинстве платежных форм.
Теперь моя проблема в том, что sfValidatorDate требует, чтобы поле 'day' не было пустым. Чтобы обойти это, я создал собственный валидатор с помощью обратного вызова, который хорошо работает:
public function validateExpirationDate($validator, $value)
{
$value['day'] = '15';
$dateValidator = new sfValidatorDate(array(
'date_format' => '#(?P<day>\d{2})(?P<month>\d{2})(?P<year>\d{2})#',
'required' => false,
'min' => strtotime('first day of this month')));
$dateValidator->clean($value);
return $value;
}
Я чувствую, что может быть более простой способ достичь этого. Как вы думаете? Вы уже решили эту проблему более чистым способом?