Изменение валидатора встроенного поля формы - PullRequest
0 голосов
/ 27 марта 2011

У меня есть эта схема:

propel:
  autor:
    id: ~
    nombre: { type: varchar, size: 255, required: true }

  libro:
    id: ~
    autor_id:   { type: integer, size: 11, foreignTable: autor,
foreignReference: id}
    titulo:     { type: varchar, size: 255 }
    paginas:    { type: varchar, size: 255, required: true }

и этот класс формы:

class AutorForm extends BaseAutorForm
{
  public function configure()
  {
    $this->embedRelation('Libro');
  }

public function foo()
{
    $this->validatorSchema['Libro']['newLibro1']['paginas'] = new
sfValidatorPass();
    return $this;

}
}

Я вызываю foo () после bind () (внутри processForm ()).

После отправки формы Auto-Libro, если я ничего не вставлю в поле 'paginas' первой вложенной формы (Libro), оно показывает "Обязательно".

Но .. почему, если у Пагинаса есть валидатор?

РЕДАКТИРОВАТЬ : после ответа Мэтта, это мой код:

var_dump($this->embeddedForms['Libro']->validatorSchema['newLibro1']['paginas']);
$this->embeddedForms['Libro']->validatorSchema['newLibro1']['paginas'] = new sfValidatorPass(array('required' => false));
var_dump($this->embeddedForms['Libro']->validatorSchema['newLibro1']['paginas']);

Это печатает это:

object(sfValidatorString)[152]
  protected 'requiredOptions' => 
    array
      empty
  protected 'defaultMessages' => 
    array
      'required' => string 'Required.' (length=9)
      'invalid' => string 'Invalid.' (length=8)
      'max_length' => string '"%value%" is too long (%max_length% characters max).' (length=52)
      'min_length' => string '"%value%" is too short (%min_length% characters min).' (length=53)
  protected 'defaultOptions' => 
    array
      'required' => boolean true
      'trim' => boolean false
      'empty_value' => string '' (length=0)
      'max_length' => null
      'min_length' => null
  protected 'messages' => 
    array
      'required' => string 'Required.' (length=9)
      'invalid' => string 'Invalid.' (length=8)
      'max_length' => string '"%value%" is too long (%max_length% characters max).' (length=52)
      'min_length' => string '"%value%" is too short (%min_length% characters min).' (length=53)
  protected 'options' => 
    array
      'required' => boolean true
      'trim' => boolean false
      'empty_value' => string '' (length=0)
      'max_length' => int 255
      'min_length' => null

object(sfValidatorPass)[196]
  protected 'requiredOptions' => 
    array
      empty
  protected 'defaultMessages' => 
    array
      'required' => string 'Required.' (length=9)
      'invalid' => string 'Invalid.' (length=8)
  protected 'defaultOptions' => 
    array
      'required' => boolean true
      'trim' => boolean false
      'empty_value' => null
  protected 'messages' => 
    array
      'required' => string 'Required.' (length=9)
      'invalid' => string 'Invalid.' (length=8)
  protected 'options' => 
    array
      'required' => boolean false  <<<<<<<<<<<< FALSE <<<<<<<<<<<<<<<<<<
      'trim' => boolean false
      'empty_value' => null

Проблема все та же: когда я пытаюсь отправить форму, поле 'paginas' все еще требуется. Почему?

sf 1.4 / propel 1.6

Хави

1 Ответ

0 голосов
/ 06 апреля 2011

Почти все валидаторы, включая sfValidatorPass, по умолчанию обязательный = true.

Я считаю, что sfValidatorPass не означает «он всегда проходит проверку», это означает «пропускать переданное значение без очистки или проверки чего-либо».

sfValidatorPass - это средство проверки личности,Он просто возвращает значение без изменений.

Так что я думаю, что вы можете просто сделать

$this->validatorSchema['Libro']['newLibro1']['paginas'] = new 
    sfValidatorPass(array('required' => false));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...