public static function registerValidators(Form_FormModel $form, AgaviValidationManager $vm, array $parameters, array $files = array()) { $conditions = array(); foreach ($form->getChildren() as $child) { if ($child instanceof Form_Elements_FieldsetModel) { continue; } $parents = (array) $child->parents; $depends = array(); foreach ($parents as $id => $condition) { $depend = bin2hex("{$id}_{$condition['opration']}_{$condition['condition']}"); $parent = $form->getChildById($id); if (is_null($parent)) { throw new Exception("can't find parent with id={$id} for {$child->id}"); } if (!isset($conditions[$depend])) { $vm->createValidator('Form_ValidatorModel', array($parent->name), array(), array('model' => 'Elements.Condition', 'name' => $depend, 'module' => 'Form', 'configuration' => $condition, 'provides' => $depend, 'severity' => 'info')); $conditions[$depend] = true; } $depends[] = $depend; } if (is_callable(array($child, 'registerValidators'))) { $child->registerValidators($vm, $depends, $parameters, $files); } else { $vm->createValidator('Form_ValidatorModel', array($child->name), array('' => 'field is required'), array('element' => $child, 'name' => $child->name, 'export' => $child->name, 'depends' => $depends, 'translation_domain' => AgaviConfig::get('Form.TranslationDomain'), 'required' => (bool) $child->required)); } } }
public function testCastOnMissingExport() { $testValues = array(array('original' => 'false', 'casted' => false), array('original' => 'true', 'casted' => true)); foreach ($testValues as $value) { $validator = $this->vm->createValidator('AgaviBooleanValidator', array('bool'), array('invalid argument')); $rd = new AgaviRequestDataHolder(array(AgaviRequestDataHolder::SOURCE_PARAMETERS => array('bool' => $value['original']))); $result = $validator->execute($rd); $this->assertEquals(AgaviValidator::SUCCESS, $result, 'Failed asserting that the validation succeeded.'); $this->assertSame($value['casted'], $rd->getParameter('bool'), 'Failed asserting that the validated value is casted'); } }
public function testMaxSuccess() { $maxError = 'value too high'; $number = '2'; $validator = $this->vm->createValidator('AgaviNumberValidator', array('number'), array('max' => $maxError), $parameters = array('type' => 'int', 'max' => 2)); $rd = new AgaviRequestDataHolder(array(AgaviRequestDataHolder::SOURCE_PARAMETERS => array('number' => $number))); $result = $validator->execute($rd); $this->assertEquals(AgaviValidator::SUCCESS, $result); $this->assertEquals(0, $this->vm->getReport()->byErrorName('max')->count(), 'Failes asserting that there is no max error.'); $this->assertEquals(array(), $this->vm->getReport()->getErrorMessages(), 'Failed asserting that no max error message is emittet.'); }
/** * @param string $content * @param \AgaviRequestDataHolder|array $parameters * @param \AgaviValidationManager $validationManager * @param array $config * @return string */ protected function executeFormPopulationFilter($content, $parameters, $validationManager = null, array $config = array()) { $container = $this->_context->getController()->createExecutionContainer('FilterTests', 'FormPopulationFilter'); $container->getResponse()->setContent($content); if ($parameters instanceof AgaviRequestDataHolder) { $rd = $parameters; } else { $rd = new AgaviRequestDataHolder(array(AgaviRequestDataHolder::SOURCE_PARAMETERS => $parameters)); } if ($validationManager) { $validationManager->execute($rd); } $fpf = new AgaviFormPopulationFilter(); $fpf->initialize($this->_context, array_merge(array('populate' => $rd, 'validation_report' => $validationManager ? $validationManager->getReport() : null, 'force_request_uri' => '/'), $config)); $filterChain = new AgaviFilterChain(); $filterChain->initialize($this->_context); $fpf->execute($filterChain, $container); return $container->getResponse()->getContent(); }