массивы — AWS PHP SDK Filter Aws \ Result Object

Я использую AWS SDK PHP V3. Если я запускаю следующий код

$result = $client->getAccountPasswordPolicy([]);
$result = $result->toArray();

Возвращает результат ниже

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
(
)

)

)

)

)

Как получить результат только RequireUppercaseCharacters или RequireLowercaseCharacters, использующих AWS SDK, или мне нужно использовать функции массива для фильтрации данных?

Ссылка Ссылка

3

Решение

ах … вы спрашиваете о JMESPath.
вы можете достичь того, что вы пытаетесь сделать,

$result = $client->getAccountPasswordPolicy([]);
$data = $result->search('PasswordPolicy.RequireUppercaseCharacters');

Вы можете прочитать больше о JMESPath здесь

2

Другие решения

Кажется, что это невозможно с текущим API. Хотя может показаться, что параметр метода открыт, чтобы указать, какие именно элементы вам нужны (потому что это массив), в документации нет никаких признаков того, что это имеет место.

Сравните документация за getAccountPasswordPolicy() с, например, ListPolicies(). Последний прямо говорит:

Вы можете отфильтровать список политик, который возвращается с помощью необязательных параметров OnlyAttached, Scope и PathPrefix.

В отличие от документов для getAccountPasswordPolicy() не упоминай об этом. Даже не упоминание о параметре. Параметр является однако упомянуто в сигнатуре метода, что заставляет меня думать, что это может появиться в будущей версии API.

CLI документация также не имеет никаких параметров подобного, так что это определенно похоже на то, что вы не можете сделать в данный момент.

Я сделал несколько тестов, на всякий случай, безуспешно:

$result = $client->getAccountPasswordPolicy(["RequireUppercaseCharacters"]);

возвращается

Неустранимая ошибка: необработанное исключение «InvalidArgumentException» с сообщением «Обнаружена 1 ошибка при проверке ввода, предоставленного для операции GetAccountPasswordPolicy:
должен быть ассоциативный массив. Найденный массив (2) ‘в /Applications/MAMP/htdocs/awss3/vendor/aws/aws-sdk-php/src/Api/Validator.php:65

И указание ассоциативного массива ничего не фильтрует:

$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
(
)

)

)

)

)

)

Итак, вы единственный вариант, пока просматриваете ключи массива, как всегда:

$result["PasswordPolicy"]["RequireUppercaseCharacters"];
1

По вопросам рекламы [email protected]