__call($ruleName, $arguments); } /** * @param mixed $ruleSpec * @param array $arguments * * @return Validatable */ public static function buildRule($ruleSpec, $arguments = array()) { if ($ruleSpec instanceof Validatable) { return $ruleSpec; } try { $validatorFqn = 'Respect\\Validation\\Rules\\'.ucfirst($ruleSpec); $validatorClass = new ReflectionClass($validatorFqn); $validatorInstance = $validatorClass->newInstanceArgs($arguments); return $validatorInstance; } catch (ReflectionException $e) { throw new ComponentException($e->getMessage()); } } /** * @param string $method * @param array $arguments * * @return self */ public function __call($method, $arguments) { if ('not' === $method && empty($arguments)) { return new static(new Rules\Not($this)); } return $this->addRule(static::buildRule($method, $arguments)); } /** * @param mixed $input * @param array $extraParams * * @return AllOfException */ public function reportError($input, array $extraParams = array()) { $exception = new AllOfException(); $input = AllOfException::stringify($input); $name = $this->getName() ?: "\"$input\""; $params = array_merge( $extraParams, get_object_vars($this), get_class_vars(__CLASS__) ); $exception->configure($name, $params); if (!is_null($this->template)) { $exception->setTemplate($this->template); } return $exception; } /** * Create instance validator * * @return Validator */ public static function create() { $ref = new ReflectionClass(__CLASS__); return $ref->newInstanceArgs(func_get_args()); } }