/** * Filters query parameter bag * * @param string $filterName * @param ParameterBag $bag * * @return ParameterBag */ public function filter($filterName, ParameterBag $bag) { $expectedParams = $this->filters[$filterName]; // Given parameters foreach ($bag->all() as $name => $value) { if (!isset($expectedParams[$name])) { throw new \InvalidArgumentException(sprintf('Unknow parameter "%s"', $name)); } $options = $expectedParams[$name]; if (0 < count($options['roles']) && !$this->authorizationChecker->isGranted($options['roles'])) { throw new AccessDeniedException(sprintf('User has not the required role to use "%s" parameter', $name)); } $this->validator->validate($name, $options, $value); $bag->set($name, $this->caster->cast($options, $value)); } // Expected parameters foreach ($expectedParams as $name => $options) { Validator::checkMissingParameter($name, $options, $bag); if (!$bag->has($name) && isset($options['default'])) { $bag->set($name, $this->caster->getDefaultValue($options)); } } return $bag; }
/** * Tests "checkMissingParameter" without missing parameter */ public function test_checkMissingParameter_success() { $parameterBag = new ParameterBag(['one' => 1, 'two' => 2]); \Gl3n\HttpQueryStringFilterBundle\Validator::checkMissingParameter('two', ['required' => true], $parameterBag); $this->boolean(true)->isTrue(); }