sfValidatorDoctrineUnique завершается неудачно с заглавных букв - PullRequest
0 голосов
/ 06 ноября 2011

Я настроил пост-валидатор в своей форме Symfony, чтобы остановить дублирование первичных ключей.

Первичный ключ - это двухсимвольная строка в данном случае.Код, используемый для проверки:

$this->mergePostValidator(new sfValidatorDoctrineUnique(array(
  'model' => 'Manufacturers',
  'column' => 'id',
  'primary_key' => 'id'
)));

Первичный ключ - в верхнем регистре (например, AU).Странно, что пост-валидатор успешно срабатывает, если в поле вводится нижний регистр 'au' (т. Е. Останавливает переход к базе данных и вызывает ошибку ограничения целостности 500), но если он введен правильно как 'AU', кажется, он не замечаетДублирование.

Есть мысли?

1 Ответ

3 голосов
/ 07 ноября 2011

Это не проблема Symfony sfDoctrineValidator. Все, что делает этот валидатор, - это поиск в вашей базе данных существующей записи. Если вы используете сопоставление «_ci» (без учета регистра) (вы используете mysql?), Поиск ничего не даст - валидатор обманут.

Затем, когда вы вставляете дубликат, вы получаете исключение из базы данных. Попробуйте изменить параметры сортировки вашей таблицы следующим образом:

ALTER TABLE  `table` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

(вы должны сказать доктрине, чтобы сделать это для вас:

MyTable:
  options: { collate: utf8_bin, charset: utf8 }

)

...