2014-09-24 42 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