Add linkToRoute functionality

remotes/origin/stable5
Bart Visscher 2012-09-12 18:00:33 +07:00
parent ceec5e593c
commit 3efe1d3b24
2 changed files with 37 additions and 6 deletions

@ -28,6 +28,20 @@ class OC_Helper {
private static $mimetypes=array();
private static $tmpFiles=array();
/**
* @brief Creates an url using a defined route
* @param $route
* @param $parameters
* @param $args array with param=>value, will be appended to the returned url
* @returns the url
*
* Returns a url to the given app and file.
*/
public static function linkToRoute( $route, $parameters = array() ) {
$urlLinkTo = OC::getRouter()->generate($route, $parameters);
return $urlLinkTo;
}
/**
* @brief Creates an url
* @param $app app

@ -7,6 +7,7 @@
*/
use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\RouteCollection;
//use Symfony\Component\Routing\Route;
@ -16,7 +17,14 @@ class OC_Router {
protected $collection = null;
protected $root = null;
protected $generator= null;
public function __construct() {
$baseUrl = OC_Helper::linkTo('', 'index.php');
$method = $_SERVER['REQUEST_METHOD'];
$host = OC_Request::serverHost();
$schema = OC_Request::serverProtocol();
$this->context = new RequestContext($baseUrl, $method, $host, $schema);
// TODO cache
$this->root = $this->getCollection('root');
}
@ -56,12 +64,7 @@ class OC_Router {
}
public function match($url) {
$baseUrl = OC_Helper::linkTo('', 'index.php');
$method = $_SERVER['REQUEST_METHOD'];
$host = OC_Request::serverHost();
$schema = OC_Request::serverProtocol();
$context = new RequestContext($baseUrl, $method, $host, $schema);
$matcher = new UrlMatcher($this->root, $context);
$matcher = new UrlMatcher($this->root, $this->context);
$parameters = $matcher->match($url);
if (isset($parameters['action'])) {
$action = $parameters['action'];
@ -77,4 +80,18 @@ class OC_Router {
throw new Exception('no action available');
}
}
public function getGenerator()
{
if (null !== $this->generator) {
return $this->generator;
}
return $this->generator = new UrlGenerator($this->root, $this->context);
}
public function generate($name, $parameters = array(), $absolute = false)
{
return $this->getGenerator()->generate($name, $parameters, $absolute);
}
}