/**
* @param string $route
* @param array $constraints
* @param array $defaults
* @param array $aliases
* @param null|array $filters
* @param null|array $validators
*/
public function addRouteSpec(array $spec)
{
if (!isset($spec['name'])) {
throw new InvalidArgumentException('Route specification is missing a route name');
}
$name = $spec['name'];
if (!isset($spec['route'])) {
$spec['route'] = $spec['name'];
}
$routeString = $this->prependRouteWithCommand($name, $spec['route'], array_key_exists('prepend_command_to_route', $spec) ? $spec['prepend_command_to_route'] : true);
$constraints = isset($spec['constraints']) && is_array($spec['constraints']) ? $spec['constraints'] : array();
$defaults = isset($spec['defaults']) && is_array($spec['defaults']) ? $spec['defaults'] : array();
$aliases = isset($spec['aliases']) && is_array($spec['aliases']) ? $spec['aliases'] : array();
$filters = isset($spec['filters']) && is_array($spec['filters']) ? $spec['filters'] : null;
$validators = isset($spec['validators']) && is_array($spec['validators']) ? $spec['validators'] : null;
$description = isset($spec['description']) && is_string($spec['description']) ? $spec['description'] : '';
$shortDescription = isset($spec['short_description']) && is_string($spec['short_description']) ? $spec['short_description'] : '';
$optionsDescription = isset($spec['options_descriptions']) && is_array($spec['options_descriptions']) ? $spec['options_descriptions'] : array();
$filters = $this->prepareFilters($filters);
$validators = $this->prepareValidators($validators);
$route = new Route($name, $routeString, $constraints, $defaults, $aliases, $filters, $validators);
$route->setDescription($description);
$route->setShortDescription($shortDescription);
$route->setOptionsDescription($optionsDescription);
$this->addRoute($route);
return $this;
}