/** * {@inheritdoc} */ public function beforeValidate(Model $Model, $options = array()) { $ModelValidator = $Model->validator(); foreach ($Model->data[$Model->alias] as $field => $value) { if (!preg_match('/^([a-z0-9_]+)_confirm$/i', $field, $match)) { continue; } if (!array_key_exists($match[1], $Model->data[$Model->alias])) { continue; } if (!($Ruleset = $ModelValidator->getField($match[1]))) { $Ruleset = new CakeValidationSet($match[1], array()); } $ruleset = array(); foreach ($Ruleset->getRules() as $name => $Rule) { $ruleset[$name] = (array) $Rule; foreach (array_keys($ruleset[$name]) as $key) { if (!preg_match('/^[a-z]/i', $key)) { unset($ruleset[$name][$key]); } } } $ModelValidator->add($field, new CakeValidationSet($field, array())); $ModelValidator->getField($field)->setRule('confirmed', array('rule' => 'isConfirmed', 'message' => __d('common', "No match."))); } return true; }
/** * testSetRules method * * @return void */ public function testSetRules() { $rule = array('notEmpty' => array('rule' => 'notEmpty', 'message' => 'Can not be empty')); $Field = new CakeValidationSet('title', $rule); $RuleEmpty = new CakeValidationRule($rule['notEmpty']); $rule = array('validEmail' => array('rule' => 'email', 'message' => 'Invalid email')); $RuleEmail = new CakeValidationRule($rule['validEmail']); $rules = array('validEmail' => $RuleEmail); $Field->setRules($rules, false); $result = $Field->getRules(); $this->assertEquals(array('validEmail'), array_keys($result)); $Field->setRules(array('validEmail' => $rule), false); $result = $Field->getRules(); $this->assertEquals(array('validEmail'), array_keys($result)); $this->assertTrue(array_pop($result) instanceof CakeValidationRule); $rules = array('notEmpty' => $RuleEmpty); $Field->setRules($rules, true); $result = $Field->getRules(); $this->assertEquals(array('validEmail', 'notEmpty'), array_keys($result)); $rules = array('notEmpty' => array('rule' => 'notEmpty')); $Field->setRules($rules, true); $result = $Field->getRules(); $this->assertEquals(array('validEmail', 'notEmpty'), array_keys($result)); $this->assertTrue(array_pop($result) instanceof CakeValidationRule); $this->assertTrue(array_pop($result) instanceof CakeValidationRule); }