2015-07-20 145 views
2

我使用CakePHP的,有時不順心的事,我得到錯誤文本的牆。CakePHP的自定義異常處理

E.g.

$response = array(
      'error'=>true, 
      'invalidKey'=>false, 
      'message'=>ERROR_ACCOUNT_EXISTS, 
      ); 

我有這段代碼,讓我們說ERROR_ACCOUNT_EXISTS沒有在任何地方定義。它應該拋出異常。

這裏是我所得到的:

<pre class="cake-error"><a href="javascript:void(0);" onclick="document.getElementById('cakeErr55ad1d63b99ac-trace').style.display = (document.getElementById('cakeErr55ad1d63b99ac-trace').style.display == 'none' ? '' : 'none');"><b>Notice</b> (8)</a>: Use of undefined constant MESSAGE_REGISTRATION_SUCCESSFUL - assumed 'MESSAGE_REGISTRATION_SUCCESSFUL' [<b>APP/Controller/ApiController.php</b>, line <b>56</b>]<div id="cakeErr55ad1d63b99ac-trace" class="cake-stack-trace" style="display: none;"><a href="javascript:void(0);" onclick="document.getElementById('cakeErr55ad1d63b99ac-code').style.display = (document.getElementById('cakeErr55ad1d63b99ac-code').style.display == 'none' ? '' : 'none')">Code</a> <a href="javascript:void(0);" onclick="document.getElementById('cakeErr55ad1d63b99ac-context').style.display = (document.getElementById('cakeErr55ad1d63b99ac-context').style.display == 'none' ? '' : 'none')">Context</a><pre id="cakeErr55ad1d63b99ac-code" class="cake-code-dump" style="display: none;"><code><span style="color: #000000"><span style="color: #0000BB">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'invalidKey'</span><span style="color: #007700">=&gt;</span><span style="color: #0000BB">false</span><span style="color: #007700">,</span></span></code><code><span style="color: #000000"><span style="color: #0000BB">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'user'</span><span style="color: #007700">=&gt;</span><span style="color: #0000BB">$result</span><span style="color: #007700">[</span><span style="color: #DD0000">'User'</span><span style="color: #007700">],</span></span></code><span class="code-highlight"><code><span style="color: #000000"><span style="color: #0000BB">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'message'</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">MESSAGE_REGISTRATION_SUCCESSFUL</span><span style="color: #007700">,</span></span></code></span></pre><pre id="cakeErr55ad1d63b99ac-context" class="cake-context" style="display: none;">$name = &#039; 

我不希望這樣的HTML錯誤的。

我試圖嘗試catch子句,但結果是一樣的。

我該如何處理這樣的錯誤?

+0

我不敢肯定,如果我理解你的問題。你有問題嗎,你想拋出一個特殊的異常?如果是的話爲什麼不這樣說呢? –

+0

AFAIK,這個產量HTML'500'狀態,這樣你就可以處理它就像你處理任何'500'(http://book.cakephp.org/2.0/en/development/exceptions.html#exception-renderer )。這些新頁面僅在調試設置爲「0」時纔會顯示。 – Holt

回答

0
ERROR_ACCOUNT_EXISTS 

這是一個常量,如果沒有定義將會導致一個致命的錯誤,它似乎沒有被捕獲。見How do I catch a PHP Fatal Error

而且這種氣味像一個非常糟糕的使用常量,他們不應該被使用的消息。技術上可行?是。良好的做法?不需要。如果不需要翻譯,可以使用CakePHP的翻譯功能,也可以僅使用Sting。

因此,不是捕捉致命錯誤,而是在第一位修復問題而不是在此處使用常量 - 或者在某處定義常量。致命錯誤應該是固定而不是隱藏和解決。不修復致命錯誤甚至是通知就像是在腐爛的核心上面放一些顏色,並認爲不好的做法。

+0

,這不是我的問題,是的,我知道這個問題,我可以有固定的問題,但是我問是什麼原因造成這個文本牆,以及如何能趕上它,如果任何不尋常的錯誤發生不發送。該異常很可能會導致我的應用程序崩潰,並避免它,我必須捕獲此錯誤。另外,我不能硬編碼字符串,因爲每個字符串都可以在很多地方使用。這裏應該是什麼好的做法? –

+0

我完全不同意。認真詢問原因是什麼? **錯誤代碼**。修理它。從PHP文件:「這些表明,*不能*被恢復的錯誤,如內存分配問題*腳本執行停止*。」這根本不應該在任何情況下發生的。特別是給定的問題是一個明顯的問題,易於解決:聲明常量。 – burzum

+0

是的,我會和已經刪除了變量,但它只是爲了示例。但是我問一個簡單的問題,我如何能處理這個該死的例外,我不希望它發生的任何其他問題,可能會導致整個應用程序出現故障。 –