/**
  * @see sfValidatorBase
  */
 protected function doClean($values)
 {
     if (null === $values) {
         $values = array();
     }
     if (!is_array($values)) {
         throw new InvalidArgumentException('You must pass an array parameter to the clean() method');
     }
     $clean = array();
     $unused = array_keys($this->fields);
     $errorSchema = new sfValidatorErrorSchema($this);
     // check that post_max_size has not been reached
     if (isset($_SERVER['CONTENT_LENGTH']) && (int) $_SERVER['CONTENT_LENGTH'] > $this->getBytes(ini_get('post_max_size')) && ini_get('post_max_size') != 0) {
         $errorSchema->addError(new sfValidatorError($this, 'post_max_size'));
         throw $errorSchema;
     }
     // pre validator
     try {
         $values = $this->preClean($values);
     } catch (sfValidatorErrorSchema $e) {
         $errorSchema->addErrors($e);
     } catch (sfValidatorError $e) {
         $errorSchema->addError($e);
     }
     // validate given values
     foreach ($values as $name => $value) {
         // field exists in our schema?
         if (!array_key_exists($name, $this->fields)) {
             if (!$this->options['allow_extra_fields']) {
                 $errorSchema->addError(new sfValidatorError($this, 'extra_fields', array('field' => $name)));
             } else {
                 if (!$this->options['filter_extra_fields']) {
                     $clean[$name] = $value;
                 }
             }
             continue;
         }
         unset($unused[array_search($name, $unused, true)]);
         // validate value
         try {
             $clean[$name] = $this->fields[$name]->clean($value);
         } catch (sfValidatorError $e) {
             $clean[$name] = null;
             $errorSchema->addError($e, (string) $name);
         } catch (Exception $e) {
             $class = get_class($e);
             throw new $class($e->getMessage() . ' of "' . $name . '" field');
         }
     }
     // are non given values required?
     foreach ($unused as $name) {
         // validate value
         try {
             $clean[$name] = $this->fields[$name]->clean(null);
         } catch (sfValidatorError $e) {
             $clean[$name] = null;
             $errorSchema->addError($e, (string) $name);
         }
     }
     // post validator
     try {
         $clean = $this->postClean($clean);
     } catch (sfValidatorErrorSchema $e) {
         $errorSchema->addErrors($e);
     } catch (sfValidatorError $e) {
         $errorSchema->addError($e);
     }
     if (count($errorSchema)) {
         throw $errorSchema;
     }
     return $clean;
 }
 /**
  * @see sfValidatorBase
  */
 protected function doClean($values)
 {
     if (is_null($values)) {
         $values = array();
     }
     if (!is_array($values)) {
         throw new InvalidArgumentException('You must pass an array parameter to the clean() method');
     }
     $clean = array();
     $unused = array_keys($this->fields);
     $errorSchema = new sfValidatorErrorSchema($this);
     // pre validator
     try {
         $this->preClean($values);
     } catch (sfValidatorErrorSchema $e) {
         $errorSchema->addErrors($e);
     } catch (sfValidatorError $e) {
         $errorSchema->addError($e);
     }
     // validate given values
     foreach ($values as $name => $value) {
         // field exists in our schema?
         if (!array_key_exists($name, $this->fields)) {
             if (!$this->options['allow_extra_fields']) {
                 $errorSchema->addError(new sfValidatorError($this, 'extra_fields', array('field' => $name)));
             } else {
                 if (!$this->options['filter_extra_fields']) {
                     $clean[$name] = $value;
                 }
             }
             continue;
         }
         unset($unused[array_search($name, $unused, true)]);
         // validate value
         try {
             $clean[$name] = $this->fields[$name]->clean($value);
         } catch (sfValidatorError $e) {
             $clean[$name] = null;
             $errorSchema->addError($e, (string) $name);
         }
     }
     // are non given values required?
     foreach ($unused as $name) {
         // validate value
         try {
             $clean[$name] = $this->fields[$name]->clean(null);
         } catch (sfValidatorError $e) {
             $clean[$name] = null;
             $errorSchema->addError($e, (string) $name);
         }
     }
     // post validator
     try {
         $clean = $this->postClean($clean);
     } catch (sfValidatorErrorSchema $e) {
         $errorSchema->addErrors($e);
     } catch (sfValidatorError $e) {
         $errorSchema->addError($e);
     }
     if (count($errorSchema)) {
         throw $errorSchema;
     }
     return $clean;
 }
$es1->addError($e1, 'e1');
$es1->addError($e2, 'e2');
$es2 = new sfValidatorErrorSchema($v1);
$es2->addError($e1);
$es2->addError($e1, 'e1');
$es2->addError($es1, 'e2');
$es->addError($es2, 'e2');
$t->is($es->getCode(), 'max_length e1 [max_length] e2 [max_length max_length e1 [max_length max_length] e2 [min_length max_length e1 [max_length] e2 [min_length]]]', '->addError() adds an error to the error schema');
// ->addErrors()
$t->diag('->addErrors()');
$es1 = new sfValidatorErrorSchema($v1);
$es1->addError($e1);
$es1->addError($e1, 0);
$es1->addError($e2, '1');
$es = new sfValidatorErrorSchema($v1);
$es->addErrors($es1);
$t->is($es->getGlobalErrors(), array($e1), '->addErrors() adds an array of errors to the current error');
$t->is($es->getNamedErrors(), array(0 => $e1, '1' => $e2), '->addErrors() merges a sfValidatorErrorSchema to the current error');
// ->getGlobalErrors()
$t->diag('->getGlobalErrors()');
$e = new sfValidatorErrorSchema($v1);
$e->addError($e1);
$e->addError($e2, 'e2');
$e->addError($e1, '2');
$t->is($e->getGlobalErrors(), array($e1), '->getGlobalErrors() returns all globals/non named errors');
// ->getNamedErrors()
$t->diag('->getNamedErrors()');
$t->is($e->getNamedErrors(), array('e2' => $e2, '2' => $e1), '->getNamedErrors() returns all named errors');
// ->getValue()
$t->diag('->getValue()');
$t->is($e->getValue(), null, '->getValue() always returns null');
 /**
  * @see sfValidatorBase
  */
 protected function doClean($values)
 {
     if (is_null($values)) {
         $values = array();
     }
     if (!is_array($values)) {
         throw new InvalidArgumentException('You must pass an array parameter to the clean() method');
     }
     $c_field = $this->getOption('control_field');
     $c_value = isset($values[$c_field]) ? $values[$c_field] : null;
     $validator_schema = $this->getOption('validator_schema') ? $this->getOption('validator_schema') : null;
     $validator_schema->setOption('allow_extra_fields', true);
     foreach ($validator_schema->getFields() as $field_name => $validator) {
         $validator_schema[$field_name]->setOption('required', true);
     }
     $boolVal = new sfValidatorBoolean();
     $errorSchema = new sfValidatorErrorSchema($this);
     try {
         if ($this->getOption('callback')) {
             $values[$c_field] = call_user_func($this->getOption('callback'), $c_value);
         } else {
             $values[$c_field] = $boolVal->clean($c_value);
         }
     } catch (sfValidatorError $e) {
         throw new sfValidatorErrorSchema($this, array($c_field => $e));
     }
     if (!$values[$c_field]) {
         return $values;
     } else {
         try {
             $clean = $validator_schema->clean($values);
         } catch (sfValidatorErrorSchema $e) {
             $errorSchema->addErrors($e);
         } catch (sfValidatorError $e) {
             $errorSchema->addError($e);
         }
         if (count($errorSchema)) {
             throw $errorSchema;
         }
     }
     return $values;
 }