Guzzleの内部構造に関する私の非常に基本的な理解が、このエラーの原因である可能性があります (PHPUnit テスト):
PHP 致命的なエラー: 最大関数ネスト レベル '100' に達しました。中止します! \vendor\guzzle\guzzle\src\Guzzle\Http\QueryString.php の 234 行目
以下のセクション (プラグインとパーサー) が相互に呼び出しているようです。プラグインはイベントをリッスンし、イベントのcommand.before_send
リスナーとしてクロージャーを追加しrequest.exception
ます。
/**
* The plugin adds a closure listener for the event 'response.exception'. The
* closure is using the parser (RestInterfaceParser).
*/
class ResponseListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array('command.before_send' => 'onCommandBeforeSend');
}
public function onCommandBeforeSend(Event $event)
{
// ...
$command = $event['command'];
$request = $command->getRequest();
$request->getEventDispatcher()->addListener(
'request.exception',
function (Event $event) use ($command, $parser) {
$parsed = $parser->parse($command);
// ...
}
);
}
}
これまでのところ特別なことは何もありません!応答オブジェクトにアクセスしようとすると、パーサーが原因でエラーが発生します。
/**
* The parser invoked by the closure listener.
*/
class RestInterfaceParser implements ResponseParserInterface
{
public function parse(CommandInterface $command)
{
var_dump($command->getResponse());
}
}
その行を削除すると、エラーが削除されます。しかし、驚いたことに、パーサー内に応答オブジェクトが必要です。ここでは「純粋な」再帰であるため、ネストレベル ( xdebug.max_nesting_level = 1000
) を上げても役に立ちません。