diff --git a/Service/BreadcrumbService.php b/Service/BreadcrumbService.php index fe535ec..df18993 100644 --- a/Service/BreadcrumbService.php +++ b/Service/BreadcrumbService.php @@ -196,7 +196,39 @@ public function getLabel($name, array $params = array()) // pass } } - + + if ($route->hasDefault('properties')) { + $request = $this->container->get('request'); + foreach ($params as $key => $param) { + // ignore irrelevant params + if (in_array($key, array('_controller', '_route', 'parent', 'label', 'properties'))) { + continue; + } + // get entity from request + $entity = $request->attributes->get($key); + $properties = $route->getDefault('properties'); + if (is_object($entity)) { + // get value from propery, getter method or __toString() + if (key_exists($key, $properties)) { + $reflector = new \ReflectionClass(get_class($entity)); + $property = $properties[$key]; + $getter = 'get' . ucfirst($property); + if ($reflector->hasProperty($property) + && $reflector->getProperty($property)->isPublic() + ) { + $params[$key] = $entity->{$property}; + } elseif ($reflector->hasMethod($getter) + && $reflector->getMethod($getter)->isPublic() + ) { + $params[$key] = $entity->{$getter}(); + } elseif ($reflector->hasMethod('__toString')) { + $params[$key] = (string) $entity; + } + } + } + } + } + return $this->applyParams($label, $this->matchParams($name, $params, true)); } else { return $name; diff --git a/composer.json b/composer.json index fb249f9..622ee30 100644 --- a/composer.json +++ b/composer.json @@ -11,18 +11,18 @@ } ], "require": { - "symfony/framework-bundle": "2.1.*", - "symfony/locale": "2.1.*", - "symfony/twig-bundle": "2.1.*", - "symfony/yaml": "2.1.*" + "symfony/framework-bundle": "2.3.6", + "symfony/locale": "2.3.6", + "symfony/twig-bundle": "2.3.6", + "symfony/yaml": "2.3.6" }, "require-dev": { - "besimple/i18n-routing-bundle": "2.1.*@dev", - "symfony/browser-kit": "2.1.*", - "symfony/class-loader": "2.1.*", - "symfony/css-selector": "2.1.*", - "symfony/finder": "2.1.*", - "symfony/form": "2.1.*" + "besimple/i18n-routing-bundle": "2.3.6", + "symfony/browser-kit": "2.3.6", + "symfony/class-loader": "2.3.6", + "symfony/css-selector": "2.3.6", + "symfony/finder": "2.3.6", + "symfony/form": "2.3.6" }, "suggest": { "besimple/i18n-routing-bundle": "Enables internationalised routes and breadcrumbs."