Сбой sfValidatorAnd при сохранении объекта i18n - PullRequest
1 голос
/ 29 апреля 2010

Я использую Symfony 1.2 с Doctrine. У меня есть объект с поведением i18n. Если у меня есть следующие валидаторы, при сохранении формы происходит сбой с ошибкой «SQLSTATE [23000]: нарушение ограничения целостности: 1048 Столбец 'id' не может быть пустым" (он пытается сохранить перевод объекта перед сохранением объекта)

$this->validatorSchema['phone'] = new sfValidatorAnd(array(
  new sfValidatorPhone(),
  new sfValidatorString(array('max_length' => 50)),
), array('required'=> false));

Если у меня есть только один валидатор (любой из обоих), он работает:

$this->validatorSchema['phone'] = new sfValidatorPhone();

То же самое происходит с двумя другими полями. Так что в sfValidatorAnd и i18n есть что-то странное. Вы знаете, что может происходить?

Спасибо!

1 Ответ

0 голосов
/ 30 апреля 2010

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

$this->validatorSchema['phone'] = new sfValidatorPhone(array('max_length' => 50, 'required' => false));

И sfValidatorPhone расширяет sfValidatorString:

<?php

class sfValidatorPhone extends sfValidatorString
{
  protected function configure($options = array(), $messages = array())
  {
    $this->addOption('required');

    $this->addMessage('required', 'The phone is required.');

    $this->addMessage('international', sfContext::getInstance()->getI18n()->__('The phone must have the international country code (+/00)'));

    parent::configure($options, $messages);
  }

  protected function doClean($value)
  {
    $phone = preg_replace('/[^0-9|+]/','',$value);

    $phone = parent::doClean($phone);

    ...code...

    return $phone;

  }
}
...