/** * Fix bug where rules messages added with Validator::addRule were replaced after creating validator instance */ public function testRuleMessagesReplacedAfterConstructor() { $customMessage = 'custom message'; $ruleName = 'customRule'; $fieldName = 'fieldName'; Validator::addRule($ruleName, function () { }, $customMessage); $v = new Validator(array($fieldName => $fieldName)); $v->rule($ruleName, $fieldName); $v->validate(); $messages = $v->errors(); $this->assertArrayHasKey($fieldName, $messages); $this->assertEquals(ucfirst("{$fieldName} {$customMessage}"), $messages[$fieldName][0]); }
/** * オリジナルの検証ルールを追加します。 * @param string $ruleName 検証ルール名 * @param callable $validator 検証を行う関数<br> * 検証時に`($value, $fieldName, $options)`が渡されます。 * @param callable $jsGenerator クライアントサイドの検証を行うJavaScriptコードを返す関数<br> * コード生成時に`($value, $fieldName, $params)`が渡され、<br> * 生成されたコードは `function (value, fieldName) {` と ` }` でラップされて出力されます。 */ public static function addRule($ruleName, callable $validator, callable $jsGenerator = null) { Valitron::addRule($ruleName, $validator); static::$customRules[$ruleName] = ['validator' => $validator, 'jsGenerator' => $jsGenerator]; }
public function testAddRuleCallbackArrayWithArrayAsExtraParameterAndCustomMessageLabel() { $v = new Validator(array('name' => 'Chester Tester')); $v->labels(array('name' => 'Name')); $v->addRule('testRule', array($this, 'sampleObjectCallbackFalse')); $v->rule('testRule', 'name', array('foo', 'bar'))->message('Invalid name selected.'); $this->assertFalse($v->validate()); }