我在Symfony2项目上工作了很长时间,看起来非常好。 但是,为了节省一些时间,我在没有实际测试功能的情况下进行了很多编程。显然,我也没有把它推到现场环境中。
现在我试图启动内置的PHP服务器来在本地运行我的项目,看看我通过盲目编码打破了什么......好吧,我必须已经破坏了一些东西。
app/console server:start
挂了几秒钟,最后我收到一个错误:
[Symfony\Component\Debug\Exception\ContextErrorException]
Warning: Invalid argument supplied for foreach()
那就是它。控制台里几乎没有其他内容。它没有说出我犯了错误的地方,是否在我的代码中(没有类名,没有行)或其他地方......这就像大海捞针一样。
我已尝试使用 - 强力标志运行它,因为它只是一个警告,也许它可以继续并在以后再次崩溃(并给我一个正确的理由然后),但我得到了同样的错误。
所有其他命令,例如尝试清除缓存,尝试验证我的学说模式等,都会产生完全相同的结果。日志中也没有。甚至不在/ 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
起初我很困惑,因为这不是我自己编辑过的文件。但经过几次划痕后,我可以发现我的一个EventListener有代码:
static public function getSubscribedEvents()
{
//return array(
//array("event" => "serializer.post_serialize", "class" => "Acme\myBundle\Entity\myEntity", "method" => "onPostSerialize")
//);
}
导致给foreach()的无效参数。 我仍然认为默认情况下可以在警告信息中包含一些小提示,因为这实在太模糊了,但幸运的是JimL救了这一天。
答案 0 :(得分:0)
当您使用CLI时,您不使用Apache,因此不会出现任何错误。您可以更改详细级别 http://symfony.com/doc/current/components/console/introduction.html#verbosity-levels