In your form class (lib/form/doctrine/classForm.class.php)
$this->validatorSchema->setPostValidator(
new sfValidatorMultiFields(
array('field1', 'field2', 'field3'),
array('labels' => array('name1', 'name2', 'name3')),
array('global_invalid' => 'Multi fields error')));
save this class in a lib folder, for exemple apps/frontend/lib/sfValidatorMultiFields.class.php
<?
class sfValidatorMultiFields extends sfValidatorSchema
{
public function __construct(array $fields, $options = array(), $messages = array())
{
$this->addOption('fields', $fields);
$this->addMessage('invalid', 'Error with this field');
$this->addMessage('global_invalid', 'Multi fields error');
parent::__construct(null, $options, $messages);
}
protected function doClean($values)
{
$valid = false;
foreach ($this->getOption('fields') as $field) {
//put here your validation code
// ex: $values[$field] ....
}
//another example, at least one field in not empty
if($values['field1'] != '' || $values['field2'] != '' || $values['field3'] != '')
{
$valid = true;
}
if ($valid)
{
$errorSchema = new sfValidatorErrorSchema($this);
// The global error
$errorSchema->addError(new sfValidatorError($this, 'global_invalid', array()));
}
// Fields error
$error = new sfValidatorError($this, 'invalid', array()));
// Add the error for each defined fields
foreach ($this->getOption('fields') as $field)
{
$errorSchema->addError($error, $field);
}
throw $errorSchema;
}
return $values;
}
}
?>
The keys points are :
– use $this->validatorSchema->setPostValidator() in your form class
– all fields are now available from the $values array ($values[‘field1′], $values[‘field2′] …)