😅

zendesk_api_client_php での stream_for() が定義されていなくて怒られる件

2021/12/12に公開

皆様!
おはようございます!こんにちは!こんばんは!おげんきですか!
tyamahoriです。

とりあえず、落ち着いてほしい。
君はきっと、composer update をしたら、zendesk_api_client_php でエラーが発生して困っているはずだ。。

そう、自分も困っていた。
だけど、なんとかできたので、今回やり方を共有したいと思う。

GitHub Issue を見てくれ。。ここに書いてあることを行えば、なんとかなるかもしれない。この記事でtyamahoriは手順をまとめて行きたいと思う。

上書きするファイルを生成する

zendeskのライブラリ側で、stream_for()というメソッドが使われている。ただこれはdepreciatedになってしまっているため、なんとか有効化する。プロジェクトのapp配下にでも次のファイルを置いてほしい。Laravelプロジェクトをベースとしている。

置き場所

app配下でいいのではないだろうか?
app/Extend/GuzzleHttp/Psr/functions.php

コード

<?php

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/** 
 * functions.php
 * zendeskのライブラリ側にて、stream_forがdepreciated担ったため、無理矢理の対応。
 * 該当PRがマージされたあと、ライブラリにて対応した場合、このファイルは削除する
 * @see https://github.com/zendesk/zendesk_api_client_php/issues/470
 * @see https://github.com/zendesk/zendesk_api_client_php/issues/470#issuecomment-911354157
 * @param string $resource
 * @param array  $options
 *
 * @return PumpStream|Stream|StreamInterface
 */
function stream_for(string $resource = '', array $options = []): PumpStream|Stream|StreamInterface
{
    return Utils::streamFor($resource, $options);
}

composer.json周りの対応

ただ、コードをおいただけではうまく行かない。。。composer.jsonで以下の対応をしてみよう!

# 省略 
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeds/"
        },
        "files": [
            "app/Extend/GuzzleHttp/Psr/functions.php"
        ]
    },
 # 省略 

肝は、files のところである。ここの設定をしないとfunctions.phpおいた意味がなくなってしまう。。
そして最後にはこのコマンドを叩く

$ composer dump-autoload

おわりに

いかがでしたか? 少しでも読者の役に立てればと願っている。

参考リンク

https://github.com/zendesk/zendesk_api_client_php/issues/470

記事執筆のお供

hitomi / SAMURAI DRIVE
https://www.youtube.com/watch?v=8YuKkUKYw6w&list=RDheK6ubmZ81k&index=3&ab_channel=avex

the brilliant green - There will be love there -愛のある場所-
https://www.youtube.com/watch?v=gI0Fc4L_-QY&list=RDheK6ubmZ81k&index=3&ab_channel=thebrilliantgreenTV

作者

https://twitter.com/tyamahori

Discussion