BEAR.ResourceのGuzzle依存バージョンについて調べたメモ
see Upgrade Guzzle
- Guzzleは、AWS-SDK-PHPが強く依存しており、この改善に合わせてかなり高頻度にバージョンアップされている (AWS-SDK-PHPのcomposer.jsonで、依存するguzzleを頻繁に更新している)
- 上のバージョンアップ時に問題となっている箇所については、元のコードで使っていたメソッド(
getHeaders()->getAll()
)が内部に連想配列を持つCollectionを返していた。利用側からはただの配列のように扱えた。 - Guzzleのこのコミットで、ヘッダーの取り扱いが単純なCollectionからHeaderCollectionに置き換えられた。この修正において、
getHeaders()
はHeaderCollectionオブジェクトを返すようになったが、HeaderCollectionのgetAll()
メソッドが返すのは内部に保持しているHeaderオブジェクトの配列となっている(個々のHeaderオブジェクトはArrayAccessに対応していない)。 - BEAR.Resource側では、guzzleから取得したヘッダー情報を連想配列として利用しようとしている
strpos($headers['Content-Type'][0], 'xml')
Guzzle側にはどれが公開インターフェイスなのか明示的な記述がないが、Guzzleの内部構造に依存せず、レスポンスヘッダーをデータとして明示的に扱うという点では、getHeaders()->toArray()
の結果を用いるのがよさそう。
ところで、Guzzleがアクティブなstableバージョンをどの程度まで見ているのか、明確な記述が見つけられなかった。 AWS-SKK-PHPが要求するGuzzleのバージョンが「アクティブ」なバージョンとも考えられるが、マイナーバージョンアップ間隔いことと、一応「安易な後方非互換は歓迎しない(当然ですが)」と書かれているため、新しい機能を利用しているのでなければ、低めのバージョンから広めに対応しておくのがユーザーには優しいかもしれない。