/** * Attempts to load Filter from Container or hands off to parent loader. * * @param Rule $rule * @return BaseFilter */ public function getFilterForRule(Rule $rule) { $filterIdentifier = $rule->getFilter(); if ($this->container === null || !$this->container->has($filterIdentifier)) { return parent::getFilterForRule($rule); } return $this->container->get($filterIdentifier); }
/** * Finds the filter responsible for executing a specific rule * * @param Rule $rule * * @throws \UnexpectedValueException If filter can't be located * @return BaseFilter */ public function getFilterForRule(Rule $rule) { $filterIdentifier = $rule->getFilter(); if (class_exists($filterIdentifier)) { return new $filterIdentifier(); } $error = "Unable to locate filter for: {$filterIdentifier} defined in " . get_class($rule); throw new \UnexpectedValueException($error); }
/** * {@inheritDoc} * * @param CallbackRule $rule */ public function apply(Rule $rule, $value) { $type = $rule->getInputType(); if ($type == CallbackRule::SELF_METHOD_TYPE) { return $this->useObjectMethod($rule->callback, $value); } if ($type == CallbackRule::CALLABLE_TYPE) { return $this->useCallable($rule->callback, $value); } if ($type == CallbackRule::CLOSURE_TYPE) { return $this->useClosure($rule->callback, $value); } throw new InvalidCallbackException("Unsupported callback provided, failed to filter property"); }