Проверка формы Symfony для полей даты (sfWidgetFormI18nDate) - PullRequest
1 голос
/ 07 декабря 2009

Я использую Symfony 1.2.9, и у меня есть форма, которая содержит два поля даты:

start_date И end_date.

Я хочу наложить следующие критерии проверки для поля 'start_date':

  1. я). НЕ МОЖЕТ быть меньше сегодняшней даты II). НЕ МОЖЕТ быть больше, чем end_date III). НЕ МОЖЕТ быть более 1 месяца прочь

Для end_date мне нужны следующие ограничения:

  1. я). Не может быть более 3 месяцев далеко от сегодняшнего дня

Я написал проверку сообщения следующим образом:

$today = date('Y-m-d');

//post validator check to make sure end date > start date
$this->validatorSchema->setPostValidator(
 new sfValidatorAnd(array(
    new sfValidatorSchemaCompare('start_date', '<', 'end_date',
      array('throw_global_error' => true),
      array('invalid' => 'The start date ("%left_field%") must be before the end date ("%right_field%")<br />')
       ),

    new sfValidatorSchemaCompare('start_date', '<', $today,
      array('throw_global_error' => true),
      array('invalid' => 'The start date ("%left_field%") cannot be earlier than today\'s date: ('.$today.')<br />')
       ),

    new sfValidatorSchemaCompare('end_date', '>', $today,
      array('throw_global_error' => true),
      array('invalid' => 'The end date ("%left_field%") cannot be before today\'s date ("%right_field%")<br />')
       )
    )
   )
 );

Однако это не работает, т. Е. Я еще не нашел способа применить ограничения на основе текущей даты или смещений от сегодняшней даты.

Решение было бы очень кстати.

1 Ответ

4 голосов
/ 08 декабря 2009

Лично для удобства чтения кода я бы переместил ваши проверки достоверности поста в метод postValidate в вашей форме, vis:

public function configure()
{
  // your normal configuration stuff goes here

  // set up your post validator method
  $this->validatorSchema->setPostValidator(
    new sfValidatorCallback(array(
      'callback' => array($this, 'postValidate')
    ))
  );
}

Тогда вы можете сделать что-то вроде следующего:

public function postValidate($validator, $values)
{
  $today = date("Y-m-d");

  if (strtotime($values["start_date"]) < strtotime($today))
  {
    $error = new sfValidatorError($validator, "Start date cannot be before than today");
    throw new sfValidatorErrorSchema($validator, array('start_date' => $error));
  }

  if (strtotime($values["start_date"]) > strtotime($values["end_date"]))
  {
    // throw a similar validation error here
  }

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