diff --git a/ChainRouter.php b/ChainRouter.php index 2ed85e0d..e8c1e640 100644 --- a/ChainRouter.php +++ b/ChainRouter.php @@ -217,9 +217,7 @@ public function generate($name, $parameters = array(), $absolute = false) try { return $router->generate($name, $parameters, $absolute); } catch (RouteNotFoundException $e) { - $hint = ($router instanceof VersatileGeneratorInterface) - ? $router->getRouteDebugMessage($name, $parameters) - : "Route '$name' not found"; + $hint = $this->getErrorMessage($name, $router, $parameters); $debug[] = $hint; if ($this->logger) { $this->logger->info('Router '.get_class($router)." was unable to generate route. Reason: '$hint': ".$e->getMessage()); @@ -231,12 +229,28 @@ public function generate($name, $parameters = array(), $absolute = false) $debug = array_unique($debug); $info = implode(', ', $debug); } else { - $info = "No route '$name' found"; + $info = $this->getErrorMessage($name); } throw new RouteNotFoundException(sprintf('None of the chained routers were able to generate route: %s', $info)); } + private function getErrorMessage($name, $router = null, $parameters = null) + { + if ($router instanceof VersatileGeneratorInterface) { + $displayName = $router->getRouteDebugMessage($name, $parameters); + } elseif (is_object($name)) { + $displayName = method_exists($name, '__toString') + ? (string) $name + : get_class($name) + ; + } else { + $displayName = (string) $name; + } + + return "Route '$displayName' not found"; + } + /** * {@inheritdoc} */