2017-09-21 4 views
3

Ich benutze AWS SDK PHP V3. Wenn ich folgenden Code ausführenAWS PHP SDK Filter Aws Result Objekt

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

Es gibt Ergebnis unter

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

         ) 

       ) 

     ) 

) 

Wie Ergebnis nur RequireUppercaseCharacters oder RequireLowercaseCharacters mit AWS SDK zu erhalten oder zu tun haben, i-Array-Funktionen verwenden, um Daten zu filtern?

Reference Link

Antwort

2

ah..you fragen nach JMESPath. können Sie erreichen, was Sie versuchen zu tun, indem

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

Sie mehr über JMESPath here

+0

Ja, das funktioniert, aber wie man mit $ result = $ client-> getAccountPasswordPolicy ([]) filtert; – niteshd22

+0

gibt es keine Filterkriterien in dieser Methode –

+0

Bitte beachten Sie diese [link] (http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html). Es besagt, dass Sie deklarativer Daten aus dem Ergebnis extrahieren können. – niteshd22

1

lesen Dies scheint, wie es mit der aktuellen API nicht möglich ist. Obwohl es so aussieht, als ob der method-Parameter geöffnet ist, um anzuzeigen, welche spezifischen Elemente Sie benötigen (weil es ein Array ist), gibt es keinerlei Anzeichen dafür, dass dies irgendwo in der Dokumentation der Fall ist.

Vergleichen Sie die documentation für getAccountPasswordPolicy() mit zum Beispiel ListPolicies(). Letztere ausdrücklich sagt:

You can filter the list of policies that is returned using the optional OnlyAttached, Scope, and PathPrefix parameters.

Im Gegensatz dazu werden die Dokumente für getAccountPasswordPolicy() nicht auf diesen Aspekt zu machen. Nicht einmal eine Erwähnung des Parameters. Der Parameter ist erwähnt jedoch in der Methodensignatur, was mich denken lässt, dass dies in einer zukünftigen Version der API kommen könnte.

Die CLI documentation hat auch keine Parameter von ähnlichem, also scheint dies definitiv etwas zu sein, was Sie im Moment nicht tun können.

ich einige Tests nur für den Fall haben, ohne Erfolg:

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

kehrt

Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Found 1 error while validating the input provided for the GetAccountPasswordPolicy operation: must be an associative array. Found array(2)' in /Applications/MAMP/htdocs/awss3/vendor/aws/aws-sdk-php/src/Api/Validator.php:65

Und ein assoziatives Array angibt nichts filtern:

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

           ) 

         ) 

       ) 

     ) 

) 

So , Sie sind nur Option für jetzt durchläuft die Schlüssel des Arrays, wie immer:

+0

In der Dokumentation heißt es: "Das Ergebnisobjekt enthält eine search() -Methode, mit der Sie deklarativer Daten aus dem Ergebnis extrahieren können", aber ich bin mir nicht sicher, wie das geht. [link] (http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html) – niteshd22

+0

Mit CLI können Sie Parameter übergeben, um bestimmte Ergebnisse abzurufen. In diesem Fall gibt der folgende Befehl nur RequireLowercaseCharacters zurück: aws iam get-account-password-policy --profile default --region ap-south-1 --output json --query 'PasswordPolicy.RequireLowercaseCharacters'' – niteshd22