diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2015-11-30 10:11:12 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2015-11-30 10:11:12 +0100 |
commit | 9c1dbaf0ad73bc84e41db964b319d7b2842ac7ae (patch) | |
tree | 5f1cfe8ae0d7092f37f45410d98dc0741a133b00 /lib | |
parent | de02cde70ce5b0df7459d4d45abdaebeca3424d6 (diff) | |
parent | aa822f76e2c608555eba3202bd5139944f72b884 (diff) | |
download | nextcloud-server-9c1dbaf0ad73bc84e41db964b319d7b2842ac7ae.tar.gz nextcloud-server-9c1dbaf0ad73bc84e41db964b319d7b2842ac7ae.zip |
Merge pull request #20788 from owncloud/catch-missing-route
Dont die when we're missing a route
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/route/cachingrouter.php | 7 | ||||
-rw-r--r-- | lib/private/route/router.php | 21 | ||||
-rw-r--r-- | lib/private/server.php | 5 |
3 files changed, 27 insertions, 6 deletions
diff --git a/lib/private/route/cachingrouter.php b/lib/private/route/cachingrouter.php index 734aa5aea4b..2d10b8ab691 100644 --- a/lib/private/route/cachingrouter.php +++ b/lib/private/route/cachingrouter.php @@ -22,6 +22,8 @@ namespace OC\Route; +use OCP\ILogger; + class CachingRouter extends Router { /** * @var \OCP\ICache @@ -30,10 +32,11 @@ class CachingRouter extends Router { /** * @param \OCP\ICache $cache + * @param ILogger $logger */ - public function __construct($cache) { + public function __construct($cache, ILogger $logger) { $this->cache = $cache; - parent::__construct(); + parent::__construct($logger); } /** diff --git a/lib/private/route/router.php b/lib/private/route/router.php index f4abfae0f43..6d3b7c742bb 100644 --- a/lib/private/route/router.php +++ b/lib/private/route/router.php @@ -30,8 +30,10 @@ namespace OC\Route; +use OCP\ILogger; use OCP\Route\IRouter; use OCP\AppFramework\App; +use Symfony\Component\Routing\Exception\RouteNotFoundException; use Symfony\Component\Routing\Matcher\UrlMatcher; use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Routing\RequestContext; @@ -78,7 +80,13 @@ class Router implements IRouter { protected $loadedApps = array(); - public function __construct() { + /** + * @var ILogger + */ + protected $logger; + + public function __construct(ILogger $logger) { + $this->logger = $logger; $baseUrl = \OC_Helper::linkTo('', 'index.php'); if (!\OC::$CLI) { $method = $_SERVER['REQUEST_METHOD']; @@ -127,6 +135,7 @@ class Router implements IRouter { /** * loads the api routes + * * @return void */ public function loadRoutes($app = null) { @@ -290,6 +299,7 @@ class Router implements IRouter { /** * Get the url generator + * * @return \Symfony\Component\Routing\Generator\UrlGenerator * */ @@ -311,11 +321,17 @@ class Router implements IRouter { */ public function generate($name, $parameters = array(), $absolute = false) { $this->loadRoutes(); - return $this->getGenerator()->generate($name, $parameters, $absolute); + try { + return $this->getGenerator()->generate($name, $parameters, $absolute); + } catch (RouteNotFoundException $e) { + $this->logger->logException($e); + return ''; + } } /** * To isolate the variable scope used inside the $file it is required in it's own method + * * @param string $file the route file location to include * @param string $appName */ @@ -331,6 +347,7 @@ class Router implements IRouter { * \OCA\MyApp\AppInfo\Application. If that class does not exist, a default * App will be intialized. This makes it optional to ship an * appinfo/application.php by using the built in query resolver + * * @param array $routes the application routes * @param string $appName the name of the app. */ diff --git a/lib/private/server.php b/lib/private/server.php index ea5937dfea4..7f3e3af6994 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -297,10 +297,11 @@ class Server extends SimpleContainer implements IServerContainer { }); $this->registerService('Router', function (Server $c) { $cacheFactory = $c->getMemCacheFactory(); + $logger = $c->getLogger(); if ($cacheFactory->isAvailable()) { - $router = new \OC\Route\CachingRouter($cacheFactory->create('route')); + $router = new \OC\Route\CachingRouter($cacheFactory->create('route'), $logger); } else { - $router = new \OC\Route\Router(); + $router = new \OC\Route\Router($logger); } return $router; }); |