我的Guzzle內部也許這個錯誤(PHPUnit的測試)的原因非常基本的理解:在測試我的Guzzle客戶端時達到了'100'的最大功能嵌套級別?
PHP Fatal error: Maximum function nesting level of '100' reached, aborting! in \vendor\guzzle\guzzle\src\Guzzle\Http\QueryString.php on line 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
)不會有幫助,因爲它在這裏是「純粹」遞歸。
你確定你正在處理你期待的對象嗎?轉儲對象,不僅是getResponse()的結果。並做更多的調試。理解你的問題的問題是,我們沒有看到更多的代碼。實際上,我不知道接口和類是從哪裏來的。 – Sven
@Sven我找到了一個解決方案(我已經發布了答案)...是的,我沒有正確處理命令對象。 – gremo