From 9d4c5f3dd5d0dd7a182f1b22625e52263924b51f Mon Sep 17 00:00:00 2001 From: dantleech Date: Tue, 30 Jul 2013 10:15:26 +0100 Subject: [PATCH 1/2] Prevent fatal error --- ChainRouter.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ChainRouter.php b/ChainRouter.php index 2ed85e0d..8f01898c 100644 --- a/ChainRouter.php +++ b/ChainRouter.php @@ -201,6 +201,12 @@ public function generate($name, $parameters = array(), $absolute = false) { $debug = array(); + if (is_object($name)) { + $displayName = get_class($name); + } else { + $displayName = $name; + } + foreach ($this->all() as $router) { // if $router does not implement ChainedRouterInterface and $name is not a string, continue if ($name && !$router instanceof ChainedRouterInterface) { @@ -219,7 +225,7 @@ public function generate($name, $parameters = array(), $absolute = false) } catch (RouteNotFoundException $e) { $hint = ($router instanceof VersatileGeneratorInterface) ? $router->getRouteDebugMessage($name, $parameters) - : "Route '$name' not found"; + : "Route '$displayName' not found"; $debug[] = $hint; if ($this->logger) { $this->logger->info('Router '.get_class($router)." was unable to generate route. Reason: '$hint': ".$e->getMessage()); @@ -231,7 +237,7 @@ public function generate($name, $parameters = array(), $absolute = false) $debug = array_unique($debug); $info = implode(', ', $debug); } else { - $info = "No route '$name' found"; + $info = "No route '$displayName' found"; } throw new RouteNotFoundException(sprintf('None of the chained routers were able to generate route: %s', $info)); From b0b84b9704497057c69e90f1d012e5aa120b8fd0 Mon Sep 17 00:00:00 2001 From: David Buchmann Date: Wed, 31 Jul 2013 01:36:25 +0200 Subject: [PATCH 2/2] cleanup error handling in generate --- ChainRouter.php | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/ChainRouter.php b/ChainRouter.php index 8f01898c..e8c1e640 100644 --- a/ChainRouter.php +++ b/ChainRouter.php @@ -201,12 +201,6 @@ public function generate($name, $parameters = array(), $absolute = false) { $debug = array(); - if (is_object($name)) { - $displayName = get_class($name); - } else { - $displayName = $name; - } - foreach ($this->all() as $router) { // if $router does not implement ChainedRouterInterface and $name is not a string, continue if ($name && !$router instanceof ChainedRouterInterface) { @@ -223,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 '$displayName' 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()); @@ -237,12 +229,28 @@ public function generate($name, $parameters = array(), $absolute = false) $debug = array_unique($debug); $info = implode(', ', $debug); } else { - $info = "No route '$displayName' 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} */