private function parsePostValidator(sfForm $form, sfValidatorBase $validator) { $options = $validator->getOptions(); $messages = $validator->getMessages(); $rules = array(); $formName = $form->getName(); $validatorName = get_class($validator); switch($validatorName) { case 'sfValidatorAnd': $return = array(); foreach ($validator->getValidators() as $v) { $return = array_merge($return, (array)$this->parsePostValidator($form, $v)); } return $return; case 'sfValidatorDoctrineUnique': case 'sfValidatorPropelUnique': $return = array(); foreach ($options['column'] as $column) { extract(sfJqueryFormValidationRules::getUrlParams()); $rules['remote'] = sfContext::getInstance()->getController()->genUrl( "{$module}/remote?form=" . get_class($form) . "&validator={$validatorName}"); $rules['messages'] = array( 'remote' => $messages['invalid'], ); $return[] = "$('#{$formName}_{$column}').rules('add', " . json_encode($rules) . ");"; } return $return; case 'sfValidatorSchemaCompare': if($options['operator'] == '==' || $options['operator'] == '===') { $rules['equalTo'] = "#{$formName}_{$options['left_field']}"; $rules['messages'] = array( 'equalTo' => $messages['invalid'], ); return "$('#{$formName}_{$options['right_field']}').rules('add', " . json_encode($rules) . ");"; } break; } }