]> source.dussan.org Git - nextcloud-server.git/commitdiff
Cache generated urls for routes
authorRobin Appelman <icewind@owncloud.com>
Mon, 24 Mar 2014 14:42:21 +0000 (15:42 +0100)
committerRobin Appelman <icewind@owncloud.com>
Mon, 24 Mar 2014 14:42:21 +0000 (15:42 +0100)
lib/private/route/cachingrouter.php [new file with mode: 0644]

diff --git a/lib/private/route/cachingrouter.php b/lib/private/route/cachingrouter.php
new file mode 100644 (file)
index 0000000..ad25372
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Route;
+
+class CachingRouter extends Router {
+       /**
+        * @var \OCP\ICache
+        */
+       protected $cache;
+
+       /**
+        * @param \OCP\ICache $cache
+        */
+       public function __construct($cache) {
+               $this->cache = $cache;
+               parent::__construct();
+       }
+
+       /**
+        * Generate url based on $name and $parameters
+        *
+        * @param string $name Name of the route to use.
+        * @param array $parameters Parameters for the route
+        * @param bool $absolute
+        * @return string
+        */
+       public function generate($name, $parameters = array(), $absolute = false) {
+               $key = $name . json_encode($parameters) . $absolute;
+               if ($this->cache->hasKey($key)) {
+                       return $this->cache->get($key);
+               } else {
+                       $url = parent::generate($name, $parameters, $absolute);
+                       $this->cache->set($key, $url, 3600);
+                       return $url;
+               }
+       }
+}