Symfony 1.4 Проверка значений формы по записям в базе данных перед сохранением - PullRequest
2 голосов
/ 28 ноября 2010

Я работаю с Symfony 1.4 и Doctrine. У меня есть форма, которая имеет шесть полей: имя, родитель1, родитель2, родитель3, родитель4, родитель5 После отправки формы я хочу проверить базу данных на две вещи: 1. Поле имени уникально 2. Что комбинация parent1, parent2, parent3, parent4 и parent5 еще не находится в базе данных. Все эти значения являются целыми числами (первичные ключи из связанной таблицы), некоторые поля оставлены пустыми как 0. Они поступают в базу данных в зависимости от порядка, в котором пользователь вводит его, поэтому мне не важен порядок, но хотелось бы убедиться, что сама комбинация не существует до сохранения формы.

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

4 голосов
/ 28 ноября 2010

Используйте sfValidatorCallback.В своем классе формы добавьте следующее в функцию setup ():

$this->validatorSchema->setPostValidator(new sfValidatorCallback(array('callback' => array($this, 'YOURCALLBACKFUNCTIONNAME'))));

Затем вы можете создать это в том же файле, функцию обратного вызова:

public function YOURCALLBACKFUNCTIONNAME($validator, $values) {
   //Validate form here
   //Access form items using  $values['FORMNAME'];
   //$error = new sfValidatorError($validator, 'A Error Message.');
   //$es = new sfValidatorErrorSchema($validator, array('FORMITEM' => $error);
   //throw $es;
   }
2 голосов
/ 29 ноября 2010

Специально для этого существует валидатор Doctrine, sfValidatorDoctrineUnique. В вашей форме попробуйте:

public function configure()
{
  parent::configure();
  $this->mergePostValidator(new sfValidatorDoctrineUnique(array(
      'model' => 'MyModelName',
      'column' => array('name')
  )));
  $this->mergePostValidator(new sfValidatorDoctrineUnique(array(
      'model' => 'MyModelName',
      'column' => array('parent1', 'parent2', 'parent3', 'parent4', 'parent5')
  )));
}
0 голосов
/ 17 апреля 2013

Я знаю, что ваш вопрос касается доктрины, но для тех, кто ищет этот ответ и использует Proepl, для этого есть валидатор Propel:

Другим полезным валидатором, связанным с моделью, является валидатор sfValidatorPropelUnique, который проверяет, что новое значение, введенное через форму, не конфликтует с существующим значением в столбце базы данных с уникальным индексом. Например, два пользователя не могут иметь один и тот же логин, поэтому при редактировании объекта User с формой необходимо добавить в этот столбец валидатор sfValidatorPropelUnique:

// Proval уникальный валидатор $ form-> setValidator ('ник', новый sfValidatorPropelUnique (array ('model' => 'User', 'column' => 'логин')));

...