Dont die when we're missing a route

This commit is contained in:
Robin Appelman 2015-11-27 13:51:20 +01:00
parent 8fe878afe9
commit b05c8faba8
3 changed files with 27 additions and 6 deletions

View File

@ -22,6 +22,8 @@
namespace OC\Route; namespace OC\Route;
use OCP\ILogger;
class CachingRouter extends Router { class CachingRouter extends Router {
/** /**
* @var \OCP\ICache * @var \OCP\ICache
@ -30,10 +32,11 @@ class CachingRouter extends Router {
/** /**
* @param \OCP\ICache $cache * @param \OCP\ICache $cache
* @param ILogger $logger
*/ */
public function __construct($cache) { public function __construct($cache, ILogger $logger) {
$this->cache = $cache; $this->cache = $cache;
parent::__construct(); parent::__construct($logger);
} }
/** /**

View File

@ -30,8 +30,10 @@
namespace OC\Route; namespace OC\Route;
use OCP\ILogger;
use OCP\Route\IRouter; use OCP\Route\IRouter;
use OCP\AppFramework\App; use OCP\AppFramework\App;
use Symfony\Component\Routing\Exception\RouteNotFoundException;
use Symfony\Component\Routing\Matcher\UrlMatcher; use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Routing\RequestContext; use Symfony\Component\Routing\RequestContext;
@ -78,7 +80,13 @@ class Router implements IRouter {
protected $loadedApps = array(); protected $loadedApps = array();
public function __construct() { /**
* @var ILogger
*/
protected $logger;
public function __construct(ILogger $logger) {
$this->logger = $logger;
$baseUrl = \OC_Helper::linkTo('', 'index.php'); $baseUrl = \OC_Helper::linkTo('', 'index.php');
if (!\OC::$CLI) { if (!\OC::$CLI) {
$method = $_SERVER['REQUEST_METHOD']; $method = $_SERVER['REQUEST_METHOD'];
@ -127,6 +135,7 @@ class Router implements IRouter {
/** /**
* loads the api routes * loads the api routes
*
* @return void * @return void
*/ */
public function loadRoutes($app = null) { public function loadRoutes($app = null) {
@ -290,6 +299,7 @@ class Router implements IRouter {
/** /**
* Get the url generator * Get the url generator
*
* @return \Symfony\Component\Routing\Generator\UrlGenerator * @return \Symfony\Component\Routing\Generator\UrlGenerator
* *
*/ */
@ -311,11 +321,17 @@ class Router implements IRouter {
*/ */
public function generate($name, $parameters = array(), $absolute = false) { public function generate($name, $parameters = array(), $absolute = false) {
$this->loadRoutes(); $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 * 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 $file the route file location to include
* @param string $appName * @param string $appName
*/ */
@ -331,6 +347,7 @@ class Router implements IRouter {
* \OCA\MyApp\AppInfo\Application. If that class does not exist, a default * \OCA\MyApp\AppInfo\Application. If that class does not exist, a default
* App will be intialized. This makes it optional to ship an * App will be intialized. This makes it optional to ship an
* appinfo/application.php by using the built in query resolver * appinfo/application.php by using the built in query resolver
*
* @param array $routes the application routes * @param array $routes the application routes
* @param string $appName the name of the app. * @param string $appName the name of the app.
*/ */

View File

@ -297,10 +297,11 @@ class Server extends SimpleContainer implements IServerContainer {
}); });
$this->registerService('Router', function (Server $c) { $this->registerService('Router', function (Server $c) {
$cacheFactory = $c->getMemCacheFactory(); $cacheFactory = $c->getMemCacheFactory();
$logger = $c->getLogger();
if ($cacheFactory->isAvailable()) { if ($cacheFactory->isAvailable()) {
$router = new \OC\Route\CachingRouter($cacheFactory->create('route')); $router = new \OC\Route\CachingRouter($cacheFactory->create('route'), $logger);
} else { } else {
$router = new \OC\Route\Router(); $router = new \OC\Route\Router($logger);
} }
return $router; return $router;
}); });