Проверка даты с помощью Symfony с использованием sfValidatorSchema - PullRequest
2 голосов
/ 21 февраля 2010

Я использую следующий виджет, чтобы позволить пользователю вводить дату

$this->widgetSchema['first_registration'] = new sfWidgetFormDate(array(
  'format' => '%month%/%year%',
  'years' => range(date('Y', time()) - 15, date('Y', time()) + 15)
));

Формат даты по умолчанию для этого виджета -% месяц% /% день% /% год%, и именно это проверяет средство проверки по умолчанию для этого виджета. Тем не менее, я попытался изменить валидатор ...

$this->validatorSchema['first_registration'] = new sfValidatorDate(array(
  'date_format' => '%month%/%year%',
  'with_time' => false
));

Это не работает, и я все еще получаю недопустимую ошибку. Кто-нибудь знает почему?

1 Ответ

3 голосов
/ 21 февраля 2010

Ваш виджет и валидатор все еще содержат поле дня.

Все ваши аргументы формата делают, чтобы предотвратить отображение дня - он все еще существует и проверяется за кулисами. Я ожидаю, что именно здесь возникает проблема.

Я бы порекомендовал самое простое исправление - установить по умолчанию день равным 1, переопределив метод связывания в рассматриваемой форме. Не знаю, как у вас дела, но когда я работаю с датами месяца / года, я часто делаю это в базе данных, поскольку это позволяет правильно работать родным форматам даты / времени - тот же аргумент применяется к формам Symfony.

// untested code - i may have array structure/method signatures incorrect.
function bind($taintedValues = array(), $taintedFiles = array()) {
  $taintedValues['first_registration']['day'] = 1;
  return parent::bind($taintedValues, $taintedFiles);
}

Кроме того, опция date_format для sfValidatorDate принимает в качестве аргумента регулярное выражение, а не формат, используемый в sfWidgetFormDate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...