protected function getUrl($routeAnnotation, $route, $args = array()) { $url = new Url($routeAnnotation); if (!empty($route)) { $url->setRoute($route); } if (isset($args['set'])) { $url->setArguments($args['set']); } if (!empty($args[1]) || !empty($args['name'])) { $url->setName(empty($args[1]) ? $args['name'] : $args[1]); } $base = 0; foreach ($this->all_filters as $type => $filters) { foreach ($filters as $filter) { $url->addFilter($type, $filter[0], array(), $filter[1] + ++$base); } } $filters = (array) $routeAnnotation; if ($routeAnnotation->isMethod()) { $class = $this->annotations->getClassInfo($routeAnnotation['class']); if (!empty($class['class'])) { $filters = array_merge((array) $class['class'], $filters); } } foreach ($filters as $annotation) { $name = strtolower($annotation['method']); if (!empty($this->route_filters[$name])) { foreach ($this->route_filters[$name] as $filter) { $url->addFilter($filter[0], $filter[1], $annotation['args'], $filter[2] + ++$base); } } } return $url; }