/**
  * Validates a parameter
  *
  * @param string       $name
  * @param array        $options
  * @param string|array $value
  */
 public function validate($name, array $options, $value)
 {
     if ($options['array'] && !is_array($value)) {
         throw new \InvalidArgumentException(sprintf('Parameter "%s" must be an array', $name));
     }
     foreach ((array) $value as $itemValue) {
         $regExp = isset($options['reg_exp']) ? $options['reg_exp'] : $this->parameterTypeChain->getParameterType($options['type'])->getDefaultRegExp();
         if (1 !== preg_match(sprintf('/%s/', $regExp), $itemValue)) {
             throw new \InvalidArgumentException(sprintf('Invalid value for parameter "%s"', $name));
         }
     }
 }
 /**
  * Returns casted default value
  *
  * @param array $options
  *
  * @return mixed
  */
 public function getDefaultValue(array $options)
 {
     $parameterType = $this->parameterTypeChain->getParameterType($options['type']);
     if ($options['array']) {
         $language = new ExpressionLanguage();
         $defaultValue = $language->evaluate($options['default']);
         if (is_array($defaultValue)) {
             foreach ($defaultValue as &$subValue) {
                 $subValue = $parameterType->castValue($subValue);
             }
         }
         return $defaultValue;
     } else {
         return $parameterType->castValue($options['default']);
     }
 }