Merge pull request #8566 from owncloud/controller-defaults
Allow setting of controller default method values through normal PHP default values
This commit is contained in:
commit
e934129bf6
|
@ -126,11 +126,11 @@ class Dispatcher {
|
||||||
// valid types that will be casted
|
// valid types that will be casted
|
||||||
$types = array('int', 'integer', 'bool', 'boolean', 'float');
|
$types = array('int', 'integer', 'bool', 'boolean', 'float');
|
||||||
|
|
||||||
foreach($this->reflector->getParameters() as $param) {
|
foreach($this->reflector->getParameters() as $param => $default) {
|
||||||
|
|
||||||
// try to get the parameter from the request object and cast
|
// try to get the parameter from the request object and cast
|
||||||
// it to the type annotated in the @param annotation
|
// it to the type annotated in the @param annotation
|
||||||
$value = $this->request->getParam($param);
|
$value = $this->request->getParam($param, $default);
|
||||||
$type = $this->reflector->getType($param);
|
$type = $this->reflector->getType($param);
|
||||||
|
|
||||||
// if this is submitted using GET or a POST form, 'false' should be
|
// if this is submitted using GET or a POST form, 'false' should be
|
||||||
|
|
|
@ -59,7 +59,12 @@ class ControllerMethodReflector {
|
||||||
|
|
||||||
// get method parameters
|
// get method parameters
|
||||||
foreach ($reflection->getParameters() as $param) {
|
foreach ($reflection->getParameters() as $param) {
|
||||||
$this->parameters[] = $param->name;
|
if($param->isOptional()) {
|
||||||
|
$default = $param->getDefaultValue();
|
||||||
|
} else {
|
||||||
|
$default = null;
|
||||||
|
}
|
||||||
|
$this->parameters[$param->name] = $default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,7 +86,7 @@ class ControllerMethodReflector {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array the arguments of the method
|
* @return array the arguments of the method with key => default value
|
||||||
*/
|
*/
|
||||||
public function getParameters() {
|
public function getParameters() {
|
||||||
return $this->parameters;
|
return $this->parameters;
|
||||||
|
|
|
@ -40,11 +40,11 @@ class TestController extends Controller {
|
||||||
* @param int $int
|
* @param int $int
|
||||||
* @param bool $bool
|
* @param bool $bool
|
||||||
*/
|
*/
|
||||||
public function exec($int, $bool) {
|
public function exec($int, $bool, $test=4, $test2=1) {
|
||||||
$this->registerResponder('text', function($in) {
|
$this->registerResponder('text', function($in) {
|
||||||
return new JSONResponse(array('text' => $in));
|
return new JSONResponse(array('text' => $in));
|
||||||
});
|
});
|
||||||
return array($int, $bool);
|
return array($int, $bool, $test, $test2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,6 +262,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function testControllerParametersInjected() {
|
public function testControllerParametersInjected() {
|
||||||
$this->request = new Request(array(
|
$this->request = new Request(array(
|
||||||
'post' => array(
|
'post' => array(
|
||||||
|
@ -280,10 +281,34 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
|
||||||
$this->dispatcherPassthrough();
|
$this->dispatcherPassthrough();
|
||||||
$response = $this->dispatcher->dispatch($controller, 'exec');
|
$response = $this->dispatcher->dispatch($controller, 'exec');
|
||||||
|
|
||||||
$this->assertEquals('[3,true]', $response[2]);
|
$this->assertEquals('[3,true,4,1]', $response[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function testControllerParametersInjectedDefaultOverwritten() {
|
||||||
|
$this->request = new Request(array(
|
||||||
|
'post' => array(
|
||||||
|
'int' => '3',
|
||||||
|
'bool' => 'false',
|
||||||
|
'test2' => 7
|
||||||
|
),
|
||||||
|
'method' => 'POST'
|
||||||
|
));
|
||||||
|
$this->dispatcher = new Dispatcher(
|
||||||
|
$this->http, $this->middlewareDispatcher, $this->reflector,
|
||||||
|
$this->request
|
||||||
|
);
|
||||||
|
$controller = new TestController('app', $this->request);
|
||||||
|
|
||||||
|
// reflector is supposed to be called once
|
||||||
|
$this->dispatcherPassthrough();
|
||||||
|
$response = $this->dispatcher->dispatch($controller, 'exec');
|
||||||
|
|
||||||
|
$this->assertEquals('[3,true,4,7]', $response[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function testResponseTransformedByUrlFormat() {
|
public function testResponseTransformedByUrlFormat() {
|
||||||
$this->request = new Request(array(
|
$this->request = new Request(array(
|
||||||
'post' => array(
|
'post' => array(
|
||||||
|
@ -305,7 +330,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
|
||||||
$this->dispatcherPassthrough();
|
$this->dispatcherPassthrough();
|
||||||
$response = $this->dispatcher->dispatch($controller, 'exec');
|
$response = $this->dispatcher->dispatch($controller, 'exec');
|
||||||
|
|
||||||
$this->assertEquals('{"text":[3,false]}', $response[2]);
|
$this->assertEquals('{"text":[3,false,4,1]}', $response[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -331,7 +356,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
|
||||||
$this->dispatcherPassthrough();
|
$this->dispatcherPassthrough();
|
||||||
$response = $this->dispatcher->dispatch($controller, 'exec');
|
$response = $this->dispatcher->dispatch($controller, 'exec');
|
||||||
|
|
||||||
$this->assertEquals('{"text":[3,false]}', $response[2]);
|
$this->assertEquals('{"text":[3,false,4,1]}', $response[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -359,7 +384,10 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
|
||||||
$this->dispatcherPassthrough();
|
$this->dispatcherPassthrough();
|
||||||
$response = $this->dispatcher->dispatch($controller, 'exec');
|
$response = $this->dispatcher->dispatch($controller, 'exec');
|
||||||
|
|
||||||
$this->assertEquals('{"text":[3,true]}', $response[2]);
|
$this->assertEquals('{"text":[3,true,4,1]}', $response[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ class ControllerMethodReflectorTest extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function arguments($arg, $arg2) {}
|
public function arguments($arg, $arg2='hi') {}
|
||||||
public function testReflectParameters() {
|
public function testReflectParameters() {
|
||||||
$reader = new ControllerMethodReflector();
|
$reader = new ControllerMethodReflector();
|
||||||
$reader->reflect(
|
$reader->reflect(
|
||||||
|
@ -96,7 +96,7 @@ class ControllerMethodReflectorTest extends \PHPUnit_Framework_TestCase {
|
||||||
'arguments'
|
'arguments'
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(array('arg', 'arg2'), $reader->getParameters());
|
$this->assertEquals(array('arg' => null, 'arg2' => 'hi'), $reader->getParameters());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ class ControllerMethodReflectorTest extends \PHPUnit_Framework_TestCase {
|
||||||
'arguments2'
|
'arguments2'
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(array('arg',), $reader->getParameters());
|
$this->assertEquals(array('arg' => null), $reader->getParameters());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue