|
@@ -49,12 +49,12 @@ class RouteCollection
|
|
|
*/
|
|
|
public function add($name, $pattern = null, array $defaults = array(), array $requirements = array(), array $options = array())
|
|
|
{
|
|
|
- $pattern = sprintf('%s/%s', $this->baseRoutePattern, $pattern ?: $name);
|
|
|
+ $pattern = $this->baseRoutePattern . '/'. ($pattern ?: $name);
|
|
|
$code = $this->getCode($name);
|
|
|
- $routeName = sprintf('%s_%s', $this->baseRouteName, $name);
|
|
|
+ $routeName = $this->baseRouteName . '_' . $name;
|
|
|
|
|
|
if (!isset($defaults['_controller'])) {
|
|
|
- $defaults['_controller'] = sprintf('%s:%s', $this->baseControllerName, $this->actionify($code));
|
|
|
+ $defaults['_controller'] = $this->baseControllerName . ':' . $this->actionify($code);
|
|
|
}
|
|
|
|
|
|
if (!isset($defaults['_sonata_admin'])) {
|
|
@@ -63,7 +63,9 @@ class RouteCollection
|
|
|
|
|
|
$defaults['_sonata_name'] = $routeName;
|
|
|
|
|
|
- $this->elements[$this->getCode($name)] = new Route($pattern, $defaults, $requirements, $options);
|
|
|
+ $this->elements[$this->getCode($name)] = function() use ($pattern, $defaults, $requirements, $options) {
|
|
|
+ return new Route($pattern, $defaults, $requirements, $options);
|
|
|
+ };
|
|
|
|
|
|
return $this;
|
|
|
}
|
|
@@ -79,7 +81,7 @@ class RouteCollection
|
|
|
return $name;
|
|
|
}
|
|
|
|
|
|
- return sprintf('%s.%s', $this->baseCodeRoute, $name);
|
|
|
+ return $this->baseCodeRoute . '.' . $name;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -96,11 +98,29 @@ class RouteCollection
|
|
|
return $this;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param $element
|
|
|
+ *
|
|
|
+ * @return Route
|
|
|
+ */
|
|
|
+ private function resolve($element)
|
|
|
+ {
|
|
|
+ if (is_callable($element)) {
|
|
|
+ return call_user_func($element);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $element;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @return array
|
|
|
*/
|
|
|
public function getElements()
|
|
|
{
|
|
|
+ foreach ($this->elements as $name => $element) {
|
|
|
+ $this->elements[$name] = $this->resolve($element);
|
|
|
+ }
|
|
|
+
|
|
|
return $this->elements;
|
|
|
}
|
|
|
|
|
@@ -124,7 +144,11 @@ class RouteCollection
|
|
|
public function get($name)
|
|
|
{
|
|
|
if ($this->has($name)) {
|
|
|
- return $this->elements[$this->getCode($name)];
|
|
|
+ $code = $this->getCode($name);
|
|
|
+
|
|
|
+ $this->elements[$code] = $this->resolve($this->elements[$code]);
|
|
|
+
|
|
|
+ return $this->elements[$code];
|
|
|
}
|
|
|
|
|
|
throw new \InvalidArgumentException(sprintf('Element "%s" does not exist.', $name));
|
|
@@ -188,7 +212,6 @@ class RouteCollection
|
|
|
public function actionify($action)
|
|
|
{
|
|
|
if (($pos = strrpos($action, '.')) !== false) {
|
|
|
-
|
|
|
$action = substr($action, $pos + 1);
|
|
|
}
|
|
|
|
|
@@ -232,4 +255,4 @@ class RouteCollection
|
|
|
{
|
|
|
return $this->baseRoutePattern;
|
|
|
}
|
|
|
-}
|
|
|
+}
|