Symfony2:__ toString()不能抛出异常

时间:2015-09-21 06:19:35

标签: symfony monolog

我正在部署我的Symfony2应用程序,但是我收到以下错误:

FatalErrorException in classes.php line 0:
Error: Method Symfony\Component\HttpFoundation\Request::__toString() must not throw an exception

Apache更具描述性,说明了Monolog:

 PHP Fatal error:  Method Symfony\\Component\\HttpFoundation\\Request::__toString() must not throw an exception in /my/path/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php on line 0

这也是我唯一不清楚这是怎么回事。我本地机器上的开发环境运行正常。

我试图清除prod缓存,composer缓存和重新启动的apache服务。我还做了一个新的"作曲家安装"清除缓存后。

任何人都知道如何解决这个问题?我正在运行Symfony v2.7.4。

1 个答案:

答案 0 :(得分:0)

例如,您应该检查$ _COOKIE或$ _SESSION; 问题是您可以在$ _COOKIE中使用数组值,因此在您的调试环境中,您可能会遇到以下情况:

Debug::enable() //see, i don't exclude E_NOTICE here
$request = Request::createFromGlobals();
echo $request->__toString();

//so, from now you've got your Exception because of
//Debug package converts E_NOTICE to Fatal
//which turns into Exception 

因此,如果你想解决这个问题,你需要:

  1. 找到异常触发的真正原因(通知,弃用,严格消息等)
  2. 将其从调试中排除:Debug::enable(~E_NOTICE);
  3. 或者,如果可能,只需从代码中删除(string)$request;

    请参阅Request code

    //part of __toString() method
    foreach ($this->cookies as $k => $v) {
        $cookies[] = $k.'='.$v;
    }