😅
zendesk_api_client_php での stream_for() が定義されていなくて怒られる件
皆様!
おはようございます!こんにちは!こんばんは!おげんきですか!
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
おわりに
いかがでしたか?
少しでも読者の役に立てればと願っている。
参考リンク
記事執筆のお供
hitomi / SAMURAI DRIVE
the brilliant green - There will be love there -愛のある場所-
作者
Discussion