Index: tests/Zend/Rest/ServerTest.php
===================================================================
--- tests/Zend/Rest/ServerTest.php (revision 21404)
+++ tests/Zend/Rest/ServerTest.php (working copy)
@@ -542,9 +542,10 @@
/**
* @see ZF-1949
+ * @see ZF-9374
* @group ZF-1949
*/
- public function testMissingArgumentsWithDefaultsShouldNotResultInFaultResponse()
+ public function testMissingAnonArgumentsWithDefaultsShouldNotResultInFaultResponse()
{
$server = new Zend_Rest_Server();
$server->setClass('Zend_Rest_Server_Test');
@@ -552,10 +553,38 @@
$server->handle(array('method' => 'testFunc7', 'arg1' => "Davey"));
$result = ob_get_clean();
$this->assertContains('success', $result, var_export($result, 1));
- $this->assertContains('Hello today, How are you Davey', $result, var_export($result, 1));
+ $this->assertContains('Hello Davey, How are you today', $result, var_export($result, 1));
}
/**
+ * @see ZF-9374
+ */
+ public function testMissingZeroBasedAnonArgumentsWithDefaultsShouldNotResultInFaultResponse()
+ {
+ $server = new Zend_Rest_Server();
+ $server->setClass('Zend_Rest_Server_Test');
+ ob_start();
+ $server->handle(array('method' => 'testFunc7', 'arg0' => "Davey"));
+ $result = ob_get_clean();
+ $this->assertContains('success', $result, var_export($result, 1));
+ $this->assertContains('Hello Davey, How are you today', $result, var_export($result, 1));
+ }
+
+ /**
+ * @see ZF-9374
+ */
+ public function testMissingNamesArgumentsWithDefaultsShouldNotResultInFaultResponse()
+ {
+ $server = new Zend_Rest_Server();
+ $server->setClass('Zend_Rest_Server_Test');
+ ob_start();
+ $server->handle(array('method' => 'testFunc7', 'who' => "Davey"));
+ $result = ob_get_clean();
+ $this->assertContains('success', $result, var_export($result, 1));
+ $this->assertContains('Hello Davey, How are you today', $result, var_export($result, 1));
+ }
+
+ /**
* @group ZF-3751
*/
public function testCallingUnknownMethodDoesNotThrowUnknownButSpecificErrorExceptionMessage()
Index: library/Zend/Rest/Server.php
===================================================================
--- library/Zend/Rest/Server.php (revision 21404)
+++ library/Zend/Rest/Server.php (working copy)
@@ -189,28 +189,35 @@
$func_args = $this->_functions[$this->_method]->getParameters();
+ // calling_args will be a zero-based array of the parameters
$calling_args = array();
$missing_args = array();
- foreach ($func_args as $arg) {
+ foreach ($func_args as $i => $arg) {
if (isset($request[strtolower($arg->getName())])) {
- $calling_args[] = $request[strtolower($arg->getName())];
+ $calling_args[$i] = $request[strtolower($arg->getName())];
} elseif ($arg->isOptional()) {
- $calling_args[] = $arg->getDefaultValue();
+ $calling_args[$i] = $arg->getDefaultValue();
} else {
$missing_args[] = $arg->getName();
}
}
+ // anon_args may be 1-based (per docs), or 0-based (per incorrect Zend_Rest_Client @see ZF-9373)
+ $anon_args = array();
foreach ($request as $key => $value) {
if (substr($key, 0, 3) == 'arg') {
$key = str_replace('arg', '', $key);
- $calling_args[$key] = $value;
+ $anon_args[$key] = $value;
if (($index = array_search($key, $missing_args)) !== false) {
unset($missing_args[$index]);
}
}
}
+ // re-key the anon_args to be zero-based, and add in any values already set in calling_args (optional defaults)
+ ksort($anon_args);
+ $calling_args = array_values($anon_args) + $calling_args;
+
// Sort arguments by key -- @see ZF-2279
ksort($calling_args);