diff options
author | Bart Visscher <bartv@thisnet.nl> | 2012-07-23 18:58:52 +0200 |
---|---|---|
committer | Bart Visscher <bartv@thisnet.nl> | 2012-07-23 18:58:52 +0200 |
commit | 768b44b9b685a07af6030e484ab6322ba44b5b7e (patch) | |
tree | 23df0049a675a65447643ca7ef3a18a21841aa7f /lib/router.php | |
parent | d0cae6a99a332af79b2506205aa25aad4313d912 (diff) | |
download | nextcloud-server-768b44b9b685a07af6030e484ab6322ba44b5b7e.tar.gz nextcloud-server-768b44b9b685a07af6030e484ab6322ba44b5b7e.zip |
Convert routing to ownCloud fluid interface
Diffstat (limited to 'lib/router.php')
-rw-r--r-- | lib/router.php | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/router.php b/lib/router.php new file mode 100644 index 00000000000..f037ecdfef4 --- /dev/null +++ b/lib/router.php @@ -0,0 +1,50 @@ +<?php +/** + * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +use Symfony\Component\Routing\Matcher\UrlMatcher; +use Symfony\Component\Routing\RequestContext; +use Symfony\Component\Routing\RouteCollection; +//use Symfony\Component\Routing\Route; +use Symfony\Component\Routing\Exception\ResourceNotFoundException; + +class OC_Router { + protected $collections = array(); + protected $collection = null; + + public function useCollection($name) { + if (!isset($this->collections[$name])) { + $this->collections[$name] = new RouteCollection(); + } + $this->collection = $this->collections[$name]; + } + + public function create($name, $pattern, array $defaults = array(), array $requirements = array()) { + $route = new OC_Route($pattern, $defaults, $requirements); + $this->collection->add($name, $route); + return $route; + } + + public function match($url) { + $context = new RequestContext($_SERVER['REQUEST_URI'], $_SERVER['REQUEST_METHOD']); + $matcher = new UrlMatcher($this->collection, $context); + $parameters = $matcher->match($url); + if (isset($parameters['action'])) { + $action = $parameters['action']; + if (!is_callable($action)) { + var_dump($action); + throw new Exception('not a callable action'); + } + unset($parameters['action']); + call_user_func($action, $parameters); + } elseif (isset($parameters['file'])) { + include ($parameters['file']); + } else { + throw new Exception('no action available'); + } + } +} |