always set url parameters when they are available in the app dispatch

prefer url parameters passed into the main method. If they are not present, use the containers urlParameters

add space
This commit is contained in:
Bernhard Posselt 2015-01-15 14:19:56 +01:00
parent 2fbe8bbcba
commit bb0c88a577
4 changed files with 35 additions and 9 deletions

View File

@ -75,7 +75,9 @@ class App {
*/
public static function main($controllerName, $methodName, DIContainer $container, array $urlParams = null) {
if (!is_null($urlParams)) {
$container['urlParams'] = $urlParams;
$container['OCP\\IRequest']->setUrlParameters($urlParams);
} else if (isset($container['urlParams']) && !is_null($container['urlParams'])) {
$container['OCP\\IRequest']->setUrlParameters($container['urlParams']);
}
$appName = $container['AppName'];

View File

@ -233,7 +233,6 @@ class DIContainer extends SimpleContainer implements IAppContainer {
/** @var $c SimpleContainer */
/** @var $server SimpleContainer */
$server = $c->query('ServerContainer');
$server->registerParameter('urlParams', $c['urlParams']);
/** @var $server IServerContainer */
return $server->getRequest();
});

View File

@ -68,12 +68,12 @@ class Request implements \ArrayAccess, \Countable, IRequest {
$this->items['params'] = array();
if(!array_key_exists('method', $vars)) {
$vars['method'] = 'GET';
$vars['method'] = 'GET';
}
foreach($this->allowedKeys as $name) {
$this->items[$name] = isset($vars[$name])
? $vars[$name]
? $vars[$name]
: array();
}
@ -83,7 +83,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
if(count($params) > 0) {
$this->items['params'] = $params;
if($vars['method'] === 'POST') {
$this->items['post'] = $params;
$this->items['post'] = $params;
}
}
// Handle application/x-www-form-urlencoded for methods other than GET
@ -91,12 +91,12 @@ class Request implements \ArrayAccess, \Countable, IRequest {
} elseif($vars['method'] !== 'GET'
&& $vars['method'] !== 'POST'
&& strpos($this->getHeader('Content-Type'), 'application/x-www-form-urlencoded') !== false) {
parse_str(file_get_contents($this->inputStream), $params);
if(is_array($params)) {
$this->items['params'] = $params;
}
}
}
$this->items['parameters'] = array_merge(
$this->items['get'],
@ -107,6 +107,14 @@ class Request implements \ArrayAccess, \Countable, IRequest {
}
public function setUrlParameters($parameters) {
$this->items['urlParams'] = $parameters;
$this->items['parameters'] = array_merge(
$this->items['parameters'],
$this->items['urlParams']
);
}
// Countable method.
public function count() {
return count(array_keys($this->items['parameters']));
@ -207,8 +215,8 @@ class Request implements \ArrayAccess, \Countable, IRequest {
return $this->items['method'];
break;
default;
return isset($this[$name])
? $this[$name]
return isset($this[$name])
? $this[$name]
: null;
break;
}

View File

@ -214,4 +214,21 @@ class RequestTest extends \Test\TestCase {
$this->fail('Expected LogicException.');
}
public function testSetUrlParameters() {
$vars = array(
'post' => array(),
'method' => 'POST',
'urlParams' => array('id' => '2'),
);
$request = new Request($vars, $this->stream);
$newParams = array('id' => '3', 'test' => 'test2');
$request->setUrlParameters($newParams);
$this->assertEquals('test2', $request->getParam('test'));
$this->assertEquals('3', $request->getParam('id'));
$this->assertEquals('3', $request->getParams()['id']);
}
}