以下是公共功能“应该使用验证创建虚拟机”,
public function deployVirtualMachine($serviceOfferingId, $templateId, $zoneId, $account = "", $diskOfferingId = "") {
if (empty($serviceOfferingId)) {
throw new CloudStackClientException(sprintf(MISSING_ARGUMENT_MSG, "serviceOfferingId"), MISSING_ARGUMENT);
}
if (empty($templateId)) {
throw new CloudStackClientException(sprintf(MISSING_ARGUMENT_MSG, "templateId"), MISSING_ARGUMENT);
}
if (empty($zoneId)) {
throw new CloudStackClientException(sprintf(MISSING_ARGUMENT_MSG, "zoneId"), MISSING_ARGUMENT);
}
return $this->request("deployVirtualMachine", array(
'serviceofferingid' => $serviceOfferingId,
'templateid' => $templateId,
'zoneid' => $zoneId,
'account' => $account,
'diskofferingid' => $diskOfferingId,
'displayname' => $displayName,
}
我正在尝试调用此函数,但我一直遇到异常“$ templateId”缺失。但我很确定它在我的数组中定义了。
$params = array(
$serviceOfferingId => '85d06496-bb75-41fb-9358-4ab919e03fe4',
$templateId => 'c0989cf6-2da5-11e4-a846-726c7bbb864f',
$zoneId => '7cd483ab-5aad-458b-b5e1-0e270310f41c',
$name => 'srv11'
);
echo $cloudstack->deployVirtualMachine($params);
任何帮助都将受到高度赞赏
谢谢
答案 0 :(得分:1)
你只传递了一个参数,一个数组。
请改为尝试:
$cloudstack->deployVirtualMachine('85d06496-bb75-41fb-9358-4ab919e03fe4', 'c0989cf6-2da5-11e4-a846-726c7bbb864f', '7cd483ab-5aad-458b-b5e1-0e270310f41c', 'srv11');
您的方法需要5个参数(3个必须参数,2个可选参数)。 $params
正在收到$serviceOfferingId
。
单独传递值,或更改方法的签名以接受单个参数。
例如:
public function deployVirtualMachine($params) {
if (!isset($params['serviceOfferingId'])) {
throw new CloudStackClientException(sprintf(MISSING_ARGUMENT_MSG, "serviceOfferingId"), MISSING_ARGUMENT);
}
// etc...
}
还有一件事,通过使用$serviceOfferingId
作为数组键,您说密钥应该是变量$serviceOfferingId
的值。这似乎不是你想要的。改用字符串; 'serviceOfferingId'
。
$serviceOfferingId = 'foo';
$params = array(
$serviceOfferingId => 'bar'
);
产地:
Array
(
[foo] => bar
)
你想要的是:
$params = array(
'serviceOfferingId' => 'bar'
);
哪会产生:
Array
(
[serviceOfferingId] => bar
)
答案 1 :(得分:1)
你的方法需要5个类型为string的单个参数,在方法调用中你传递一个类型为array的参数 - 你期望什么?
这样称呼:
echo $cloudstack->deployVirtualMachine('85d06496-bb75-41fb-9358-4ab919e03fe4',
'c0989cf6-2da5-11e4-a846-726c7bbb864f',
'7cd483ab-5aad-458b-b5e1-0e270310f41c',
null,
'srv11' );
答案 2 :(得分:1)
另一个更奇怪的解决方案是将数组$params
传递给closure:
public $deployVirtualMachine = function ()
{
....
Params Array(根据Aymans的回答)
$serviceOfferingId = 0,
$templateId = 1;
$zoneId = 2;
$name = 3;
$params = array(
$serviceOfferingId => '85d06496-bb75-41fb-9358-4ab919e03fe4',
$templateId => 'c0989cf6-2da5-11e4-a846-726c7bbb864f',
$zoneId => '7cd483ab-5aad-458b-b5e1-0e270310f41c',
$name => 'srv11'
);
然后:
call_user_func_array ( 'deployVirtualMachine ', $params );
这将传递数组,但呈现为或多或少不可读的代码:/