nit*_*d22 4 php arrays amazon-web-services amazon-iam aws-sdk
我正在使用 AWS 开发工具包 PHP V3。如果我运行以下代码
$result = $client->getAccountPasswordPolicy([]);
$result = $result->toArray();
Run Code Online (Sandbox Code Playgroud)
它返回下面的结果
Array
(
[PasswordPolicy] => Array
(
[MinimumPasswordLength] => 6
[RequireSymbols] =>
[RequireNumbers] =>
[RequireUppercaseCharacters] => 1
[RequireLowercaseCharacters] =>
[AllowUsersToChangePassword] =>
[ExpirePasswords] =>
)
[@metadata] => Array
(
[statusCode] => 200
[effectiveUri] => https://iam.amazonaws.com
[headers] => Array
(
[x-amzn-requestid] => 437f79e9-9ee0-11e7-8a82-47e702eaf8eb
[content-type] => text/xml
[content-length] => 740
[date] => Thu, 21 Sep 2017 15:19:29 GMT
[connection] => close
)
[transferStats] => Array
(
[http] => Array
(
[0] => Array
(
)
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
如何使用 AWS SDK 仅获取 RequireUppercaseCharacters 或 RequireLowercaseCharacters 的结果,还是必须使用数组函数来过滤数据?
这对于当前的 API 来说似乎是不可能的。尽管方法参数似乎是开放的,以指示您需要哪些特定项目(因为它是一个数组),但文档中的任何地方都没有任何迹象表明这种情况。
比较的文档getAccountPasswordPolicy()
,例如ListPolicies()
. 后者明确表示:
您可以使用可选的 OnlyAttached、Scope 和 PathPrefix 参数过滤返回的策略列表。
相反,文档getAccountPasswordPolicy()
没有提及这一点。甚至没有提到参数。然而,该参数在方法签名中被提及,这让我认为这可能会出现在 API 的未来版本中。
CLI 文档也没有任何类似的参数,因此这看起来绝对是您目前无法执行的操作。
我做了一些测试,以防万一,但没有成功:
$result = $client->getAccountPasswordPolicy(["RequireUppercaseCharacters"]);
Run Code Online (Sandbox Code Playgroud)
回报
致命错误:未捕获异常“InvalidArgumentException”,消息为“验证为 GetAccountPasswordPolicy 操作提供的输入时发现 1 错误:必须是关联数组”。在 /Applications/MAMP/htdocs/awss3/vendor/aws/aws-sdk-php/src/Api/Validator.php:65 中找到数组(2)'
并且指定关联数组不会过滤任何内容:
$result = $client->getAccountPasswordPolicy(["PasswordPolicy" => ["RequireUppercaseCharacters"]]);
Aws\Result Object
(
[data:Aws\Result:private] => Array
(
[PasswordPolicy] => Array
(
[MinimumPasswordLength] => 6
[RequireSymbols] =>
[RequireNumbers] =>
[RequireUppercaseCharacters] => 1
[RequireLowercaseCharacters] =>
[AllowUsersToChangePassword] => 1
[ExpirePasswords] =>
[HardExpiry] =>
)
[@metadata] => Array
(
[statusCode] => 200
[effectiveUri] => https://iam.amazonaws.com
[headers] => Array
(
// redacted
)
[transferStats] => Array
(
[http] => Array
(
[0] => Array
(
)
)
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
因此,您现在唯一的选择就是像往常一样遍历数组的键:
$result["PasswordPolicy"]["RequireUppercaseCharacters"];
Run Code Online (Sandbox Code Playgroud)