我已经在Symfony2项目上工作了一段时间,它看起来非常好。但是,为了节省一些时间,最近我一直在编程,而没有实际测试功能。显然,我也没有把它推到现场环境。
现在我正在尝试启动内置的 PHP 服务器以在本地运行我的项目,以查看我通过盲目编码破坏了什么......好吧,我一定是弄坏了什么大东西。
app/console server:start
挂起几秒钟,最后出现错误:
[Symfony'Component'Debug'Exception'ContextErrorException]
Warning: Invalid argument supplied for foreach()
就是这样。控制台中实际上没有其他内容。它没有说明我在哪里犯了错误,无论是在我的代码中(没有类名,没有行)还是其他地方......这就像大海捞针。
我尝试使用 --force 标志运行它,因为它只是一个警告,也许它可以继续并在以后再次崩溃(并给我一个适当的理由),但我得到同样的错误。
所有其他命令,例如尝试清除缓存,尝试验证我的学说模式等,都会产生完全相同的结果。日志中也没有任何东西。甚至在/var/logs/apache2 中也没有。
我已经手动清除了缓存并尝试再次运行服务器,看看它是否会向我显示不同的错误。它确实设法创建了一个文件夹结构:
.
└── dev
├── annotations
├── classes.map
├── jms_aop
├── jms_security
└── serializer
但是无法在这些文件夹中放置任何东西。所以我想我很快就得到了错误。
我正在这边大海捞针...我已经查看了我的代码,弄清楚我是否在我的 foreach 循环中犯了一个愚蠢的错误,但我什么也没看到。
有什么方法可以从Symfony获得更多的调试信息吗?一个简单的类名或行可以帮助我弄清楚根本原因可能是什么,但这只是疯狂。我什至不知道从哪里开始。
更新:
@JimL向我指出,我可以提高控制台命令输出的详细级别。
通过将 -vvv 添加到输出中,我设法获得了异常的完整堆栈跟踪。有一次我看到最后一行:
/Users/A Sneaky Ginger/path/to/my/project/vendor/jms/serializer-bundle/JMS/SerializerBundle/DependencyInjection/Compiler/RegisterEventListenersAndSubscribersPass.php:48
起初我很困惑,因为这不是我自己编辑的文件。但是在挠了几下头之后,我发现我的一个事件侦听器有代码:
static public function getSubscribedEvents()
{
//return array(
//array("event" => "serializer.post_serialize", "class" => "Acme'myBundle'Entity'myEntity", "method" => "onPostSerialize")
//);
}
这导致了给foreach()的参数无效。我仍然认为默认情况下可以在警告消息中包含一个小提示,因为这真的太模糊了,但幸运的是 JimL 挽救了这一天。
当你使用CLI时,你没有使用Apache,所以不应该有任何错误结束。您可以更改详细级别http://symfony.com/doc/current/components/console/introduction.html#verbosity-levels