Valitron\Validator::rule PHP Method

rule() public method

Convenience method to add a single validation rule
public rule ( string | callback $rule, array $fields )
$rule string | callback
$fields array
    public function rule($rule, $fields)
    {
        // Get any other arguments passed to function
        $params = array_slice(func_get_args(), 2);
        if (is_callable($rule) && !(is_string($rule) && $this->hasValidator($rule))) {
            $name = $this->getUniqueRuleName($fields);
            $msg = isset($params[0]) ? $params[0] : null;
            $this->addInstanceRule($name, $rule, $msg);
            $rule = $name;
        }
        $errors = $this->getRules();
        if (!isset($errors[$rule])) {
            $ruleMethod = 'validate' . ucfirst($rule);
            if (!method_exists($this, $ruleMethod)) {
                throw new \InvalidArgumentException("Rule '" . $rule . "' has not been registered with " . __CLASS__ . "::addRule().");
            }
        }
        // Ensure rule has an accompanying message
        $msgs = $this->getRuleMessages();
        $message = isset($msgs[$rule]) ? $msgs[$rule] : self::ERROR_DEFAULT;
        $this->_validations[] = array('rule' => $rule, 'fields' => (array) $fields, 'params' => (array) $params, 'message' => '{field} ' . $message);
        return $this;
    }

Usage Example

 /**
  * 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]);
 }
All Usage Examples Of Valitron\Validator::rule