Symfony1 更改嵌入表单字段的验证程序

Symfony1 更改嵌入表单字段的验证程序,symfony1,Symfony1,我有这个模式: 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 } pag

我有这个模式:

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;

}
}
我在bind()之后调用foo()(在processForm()内部)

提交自动Libro表单后,如果我没有在 第一个嵌入表单(Libro)的字段“paginas”,显示 “必需”

但是。。为什么paginas有验证程序通行证

编辑:在马特回答之后,这是我的代码:

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
对象(sfValidatorString)[152]
受保护的“requiredOptions”=>
排列
空的
受保护的“defaultMessages”=>
排列
“必需”=>string“必需”。(长度=9)
“无效”=>字符串“无效”。(长度=8)
“最大长度”=>字符串“%value%”太长(%max\u length%characters max)。(长度=52)
“最小长度”=>字符串“%value%”太短(%最小长度%min个字符)。(长度=53)
受保护的“默认选项”=>
排列
“必需”=>布尔值true
“trim”=>布尔值为false
“空值”=>字符串“”(长度=0)
“最大长度”=>null
“最小长度”=>null
受保护的“消息”=>
排列
“必需”=>string“必需”。(长度=9)
“无效”=>字符串“无效”。(长度=8)
“最大长度”=>字符串“%value%”太长(%max\u length%characters max)。(长度=52)
“最小长度”=>字符串“%value%”太短(%最小长度%min个字符)。(长度=53)
受保护的“选项”=>
排列
“必需”=>布尔值true
“trim”=>布尔值为false
“空值”=>字符串“”(长度=0)
“最大长度”=>int 255
“最小长度”=>null
对象(sfValidatorPass)[196]
受保护的“requiredOptions”=>
排列
空的
受保护的“defaultMessages”=>
排列
“必需”=>string“必需”。(长度=9)
“无效”=>字符串“无效”。(长度=8)
受保护的“默认选项”=>
排列
“必需”=>布尔值true
“trim”=>布尔值为false
“空值”=>null
受保护的“消息”=>
排列
“必需”=>string“必需”。(长度=9)
“无效”=>字符串“无效”。(长度=8)
受保护的“选项”=>
排列

“required”=>boolean false几乎所有验证器,包括sfValidatorPass,默认为required=true

我相信sfValidatorPass并不意味着“它总是通过验证”,而是意味着“在不清理或检查任何内容的情况下通过提交的值。”

sfValidatorPass是一个身份验证程序。它只是返回未修改的值

所以我想你能做到

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

谢谢,我写了你说的那句话,但仍然不起作用…我已经编辑了我的问题,添加了更多的线索。嗯,我不知道。您的表单字段在实际提交中是如何组织的?--是否有可能提交的Pagina没有命中您的validatorPass,而是命中BaseAutoForm中的默认验证器?