public function execute($filterChain) { $context = $this->context; if ($this->isFirstCall() && $context->getRequest()->getMethod() == sfRequest::POST) { $actionInstance = $this->context->getActionStack()->getLastEntry()->getActionInstance(); $formcfg = self::getFormConfig($context); if ($formcfg === null) { $edit = $actionInstance->getRequestParameter('edit'); $apikey = $context->getRequest()->hasParameter('af_apikey'); if (!is_array($edit) || !$apikey) { // Normal AJAX POST requests and plain forms don't have // validators from the XML config. $validators = array(); $formcfg = array(); } else { self::renderErrors(array(), 'The form is outdated. Please, refresh it.'); } } else { $validators = $formcfg['validators']; $fileTypes = $formcfg['fileTypes']; } if (ArrayUtil::get($formcfg, 'wizard', false)) { afWizard::checkStepOrRenderError(); } $errors = array(); $errorMessage = null; $requestParameters = sfToolkit13::arrayDeepMerge($context->getRequest()->getParameterHolder()->getAll(), $context->getRequest()->getFiles()); foreach ($validators as $field => $fieldValidators) { $tmp_field = $field; if ($fileTypes[$field] == 'combo') { $tmp_field = substr($field, 0, -1) . "_value]"; } foreach ($fieldValidators as $class => $args) { $params = ArrayUtil::get($args, 'params', array()); $validator = afValidatorFactory::createValidator($class, $params); $value = afValidatorFactory::prepareValue($tmp_field, $validator, $requestParameters); try { $validator->clean($value); } catch (sfValidatorError $e) { $errors[] = array($tmp_field, $e->getMessage()); } } } if (!empty($errors)) { self::renderErrors($errors, $errorMessage); } if (ArrayUtil::get($formcfg, 'wizard', false)) { $this->updateWizardState(); } self::removeIterationNumber($this->context->getRequest()->getParameterHolder()); } return $filterChain->execute(); }
{ global $t; try { $validator->clean($value); $t->fail('expected: ' . $expectedMsg); } catch (sfValidatorError $e) { $t->is($e->getMessage(), $expectedMsg); } } $validator = afValidatorFactory::createValidator('requiredValidator', array('required_error' => 'myRequiredError')); $t->is($validator->clean('full'), 'full'); assertError($validator, '', 'myRequiredError'); $validator = afValidatorFactory::createValidator('immValidatorHostname', array()); assertError($validator, '', 'Required.'); $validator = afValidatorFactory::createValidator('immValidatorHostname', array('required_error' => 'myRequiredError')); assertError($validator, '', 'myRequiredError'); $validator = afValidatorFactory::createValidator('immValidatorHostname', array('required' => 'false')); $t->is($validator->clean(''), ''); $validator = afValidatorFactory::createValidator('sfValidatorSchemaCompare', array('left_field' => 'password', 'right_field' => 're_password', 'operator' => '==', 'invalid_error' => 'myInvalidError')); $t->is($validator->getOption('left_field'), 'password'); $t->is($validator->getOption('right_field'), 're_password'); $t->is($validator->getOption('operator'), '=='); assertError($validator, array('password' => 'hello', 're_password' => 'hello2'), 'myInvalidError'); $paramHolder = new sfParameterHolder13(); $paramHolder->set('edit', array(array('password' => 'hello', 're_password' => 'hello2'))); $values = afValidatorFactory::prepareValue('edit[0][re_password]', $validator, $paramHolder); $t->is($values, array('password' => 'hello', 're_password' => 'hello2')); $paramHolder = new sfParameterHolder13(); $paramHolder->set('edit', array('password' => 'hello', 're_password' => 'hello2')); $values = afValidatorFactory::prepareValue('edit[re_password]', $validator, $paramHolder); $t->is($values, array('password' => 'hello', 're_password' => 'hello2'));