2015-04-07 11 views
8

Stripe API'u bir CMS ile entegre ediyorum. _values özelliğini sorgulardan bir dizi olarak döndürmem gerekir, böylece veriler CMS'deki şablon değişkenleri olarak kullanılabilir, ancak her zaman korunur.PHP'yi kullanarak Stripe API'sından döndürülen korunan _values ​​özelliğine nasıl erişebilirim?

Verileri almak için Reflection class kullanıyorum ama şimdi Stripe'nin \Stripe\Plan::all(); kullanıyorum, Reflection sınıfını birden çok kez işlemek için yazdığım kısayol yöntemini çağırmam gerekiyor. Tam olarak yinelemeli değil, çünkü Stripe API'sinden aradığım yönteme bağlı olarak farklı şekilde ele almak zorundayım.

Yansıma sınıfını gerçekten yinelemeli olarak kullanmanın bir yolu var mı? Farkında olmadığım bir Yansıma sınıfından daha uygun bir şey var mı?


İşte \Stripe\Plan::all(); bir örnek var_dump() ed tepkidir: Sen Reflection API kullanmak zorunda değilsiniz

object(Stripe\Collection)#604 (5) { 
    ["_opts":protected]=> 
    object(Stripe\Util\RequestOptions)#603 (2) { 
    ["headers"]=> 
    array(0) { 
    } 
    ["apiKey"]=> 
    string(32) "XXXXXXXXXXXXXXXX" 
    } 
    ["_values":protected]=> 
    array(4) { 
    ["object"]=> 
    string(4) "list" 
    ["has_more"]=> 
    bool(false) 
    ["url"]=> 
    string(9) "/v1/plans" 
    ["data"]=> 
    array(2) { 
     [0]=> 
     object(Stripe\Plan)#605 (5) { 
     ["_opts":protected]=> 
     object(Stripe\Util\RequestOptions)#603 (2) { 
      ["headers"]=> 
      array(0) { 
      } 
      ["apiKey"]=> 
      string(32) "XXXXXXXXXXXXXXXX" 
     } 
     ["_values":protected]=> 
     array(12) { 
      ["id"]=> 
      string(8) "my_plan" 
      ["interval"]=> 
      string(5) "month" 
      ["name"]=> 
      string(9) "My Plan" 
      ["created"]=> 
      int(1427441577) 
      ["amount"]=> 
      int(20000) 
      ["currency"]=> 
      string(3) "usd" 
      ["object"]=> 
      string(4) "plan" 
      ["livemode"]=> 
      bool(false) 
      ["interval_count"]=> 
      int(1) 
      ["trial_period_days"]=> 
      NULL 
      ["metadata"]=> 
      object(Stripe\AttachedObject)#608 (5) { 
      ["_opts":protected]=> 
      object(Stripe\Util\RequestOptions)#603 (2) { 
       ["headers"]=> 
       array(0) { 
       } 
       ["apiKey"]=> 
       string(32) "XXXXXXXXXXXXXXXX" 
      } 
      ["_values":protected]=> 
      array(0) { 
      } 
      ["_unsavedValues":protected]=> 
      object(Stripe\Util\Set)#612 (1) { 
       ["_elts":"Stripe\Util\Set":private]=> 
       array(0) { 
       } 
      } 
      ["_transientValues":protected]=> 
      object(Stripe\Util\Set)#613 (1) { 
       ["_elts":"Stripe\Util\Set":private]=> 
       array(0) { 
       } 
      } 
      ["_retrieveOptions":protected]=> 
      array(0) { 
      } 
      } 
      ["statement_descriptor"]=> 
      NULL 
     } 
     ["_unsavedValues":protected]=> 
     object(Stripe\Util\Set)#609 (1) { 
      ["_elts":"Stripe\Util\Set":private]=> 
      array(0) { 
      } 
     } 
     ["_transientValues":protected]=> 
     object(Stripe\Util\Set)#610 (1) { 
      ["_elts":"Stripe\Util\Set":private]=> 
      array(0) { 
      } 
     } 
     ["_retrieveOptions":protected]=> 
     array(0) { 
     } 
     } 
     [1]=> 
     object(Stripe\Plan)#611 (5) { 
     ["_opts":protected]=> 
     object(Stripe\Util\RequestOptions)#603 (2) { 
      ["headers"]=> 
      array(0) { 
      } 
      ["apiKey"]=> 
      string(32) "XXXXXXXXXXXXXXXX" 
     } 
     ["_values":protected]=> 
     array(12) { 
      ["id"]=> 
      string(9) "some_other_plan" 
      ["interval"]=> 
      string(5) "month" 
      ["name"]=> 
      string(14) "Some Other Plan" 
      ["created"]=> 
      int(1427431129) 
      ["amount"]=> 
      int(40000) 
      ["currency"]=> 
      string(3) "usd" 
      ["object"]=> 
      string(4) "plan" 
      ["livemode"]=> 
      bool(false) 
      ["interval_count"]=> 
      int(1) 
      ["trial_period_days"]=> 
      NULL 
      ["metadata"]=> 
      object(Stripe\AttachedObject)#614 (5) { 
      ["_opts":protected]=> 
      object(Stripe\Util\RequestOptions)#603 (2) { 
       ["headers"]=> 
       array(0) { 
       } 
       ["apiKey"]=> 
       string(32) "XXXXXXXXXXXXXXXX" 
      } 
      ["_values":protected]=> 
      array(0) { 
      } 
      ["_unsavedValues":protected]=> 
      object(Stripe\Util\Set)#618 (1) { 
       ["_elts":"Stripe\Util\Set":private]=> 
       array(0) { 
       } 
      } 
      ["_transientValues":protected]=> 
      object(Stripe\Util\Set)#619 (1) { 
       ["_elts":"Stripe\Util\Set":private]=> 
       array(0) { 
       } 
      } 
      ["_retrieveOptions":protected]=> 
      array(0) { 
      } 
      } 
      ["statement_descriptor"]=> 
      NULL 
     } 
     ["_unsavedValues":protected]=> 
     object(Stripe\Util\Set)#615 (1) { 
      ["_elts":"Stripe\Util\Set":private]=> 
      array(0) { 
      } 
     } 
     ["_transientValues":protected]=> 
     object(Stripe\Util\Set)#616 (1) { 
      ["_elts":"Stripe\Util\Set":private]=> 
      array(0) { 
      } 
     } 
     ["_retrieveOptions":protected]=> 
     array(0) { 
     } 
     } 
    } 
    } 
    ["_unsavedValues":protected]=> 
    object(Stripe\Util\Set)#606 (1) { 
    ["_elts":"Stripe\Util\Set":private]=> 
    array(0) { 
    } 
    } 
    ["_transientValues":protected]=> 
    object(Stripe\Util\Set)#607 (1) { 
    ["_elts":"Stripe\Util\Set":private]=> 
    array(0) { 
    } 
    } 
    ["_retrieveOptions":protected]=> 
    array(0) { 
    } 
} 
+0

Bu kitaplık hakkında hiçbir şey bilmiyorum, ancak sınıf "final" değilse, onu genişletip kendi alıcınızı yazabilmelisiniz. –

+1

@ ÁlvaroG.Vicario API bu sınıfı 'Plan :: all() 'dan geri döndürecektir, bu davranışı kolayca geçersiz kılmanın bir yolu yoktur. – hek2mgl

cevap

14

, Stripe\Collection sınıf ArrayAccess uygular, doğrudan kendisine yineleyebilirsiniz:

Collection sınıfının temel sınıfı olan

Here temel sınıftır. Bu, Stripe'nin PHP kütüphanesindeki Stripe\Plan dahil neredeyse tüm sınıflar için geçerlidir. Böylece normal dizilerle kullanacağınız her türlü özyinelemeyi kullanabilirsiniz. Eğer bir dizi olarak _values özelliği dönmek istiyorsanız

, sen __toArray() yöntemi kullanabilirsiniz:

$array = $collection->__toArray(true); 

true argüman bir tekrarlama seçenektir.

+0

Değerler üzerinde yineleme uygular, ancak seçenekler üzerinde değil – hek2mgl

+1

So? OP, _ _ _ _ _ _ _ _ _ _ _ _ _ \\\\\\\\\\\\\\\\\\\\\\. Ve sınıf '_values' özelliğini kullanarak ArrayAccess'i uygular: https://github.com/stripe/stripe-php/blob/master/lib/Object.php#L131 –

+0

Oh, benim hatam! Afedersiniz! Haklısınız ve cevabınız sorunu çözecektir. – hek2mgl

0

Victor Stanciu'nun yanıtına eklemek için, yalnızca _values dizisinin belirli öğelerine erişmek istiyorsanız, dinamik özellikleri kullanabilirsiniz.

$collection = \Stripe\Plan::all(); 
$plans = $collection->data; 

Ve sonra, benzer, her plandan herhangi Dizi öğesi alabilirsiniz:

foreach ($plans as $plan) { 
    print $plan->name; 
} 

sen verilere erişmek istiyorsanız

Örneğin, sen bu şekilde yapabiliriz Bu kodu Stripe API sürüm 3 için kullanıyorum.

İlgili konular