2014-09-24 45 views
4
不能抛出异常

我使用laravel 4.2方法照亮\ \查看查看:: __的toString()在UNIX

die(View::make('amendments.changesPopUp', $this->data)); 

这是我使用以获取一个ajax视图代码呼叫。这适用于我的本地机器在Windows上运行,但这不适用于服务器(UNIX)。任何想法,为什么这是hapening?

是的我已检查了小写和大写的情况下的文件名匹配。奇怪的是错误点指向它正在使用的controller的第0行。

这是错误,我得到

{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Method Illuminate\\View\\View::__toString() must not throw an exception","file":"mysite.com/app/controllers/myController.php","line":0}} 

更新:此工作时,我用简单的PHP文件,而不是刀片模板。我仍然不知道是什么导致了错误?

+0

@TheShiftExchange,因为它是一个Ajax调用,我们要打印任何repsonse为了通过发送和死是为了确保我没有任何回报后,我呼应的HTML,但这不是问题。 – developernaren 2014-09-24 07:07:10

+0

是的 - 可能是你得到错误的原因是因为你死了() - 这被当作抛出异常。 – Laurence 2014-09-24 07:15:56

+0

请参阅我的更新..它适用于我不使用刀片模板时。这不是我第一次使用过的..它在我的本地机器工作..请评论前仔细阅读问题.. – developernaren 2014-09-24 07:19:02

回答

1

你不应该die()出的输入。 Laravel希望能够处理响应,并且通过使用die()来缩短框架。

你的反应应该仅仅是

return View::make('amendments.changesPopUp', $this->data); 

那么这将仅打印changesPopUp文件 - 这将是由浏览器的AJAX调用正确interrepted。

+0

是否有一个原因,这可以在Windows上,而不是在UNIX?因为这在我的本地机器上完全正常工作,所以问题只出现在实时服务器中。基于所使用的操作系统,拉拉维尔的解释是否会有所不同?我知道unicode可能会导致错误,但我没有看到os以不同的方式解释整个异常。 – developernaren 2014-09-24 07:26:14

+0

我不确定 - 很难测试。但是有两点建议:1.您应该使用Laravel Homestead,这样您的“开发”环境与生产环境相似,否则您会偶尔遇到类似问题。你不应该在Laravel的生产中使用die()。 – Laurence 2014-09-24 07:32:59

8

如前所述,不使用模具()用于除调试。

另外一点需要注意的是,由于PHP的错误处理__toString实现是非常糟糕(没有堆栈跟踪等),使用echo View::make(...)->render()而不只是echo View::make(...)获得更多的描述性错误 - 尽管你的情况,你可以替换回声模具。

但是,不要使用死亡。

+1

使用render()方法的好技巧。我遇到了这个错误,并切换到render()而不是__toString(),我几乎可以立即找到问题。 – 2015-05-01 16:13:13