2015-07-20 123 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

是的,我会和已经删除了变量,但它只是为了示例。但是我问一个简单的问题,我如何能处理这个该死的例外,我不希望它发生的任何其他问题,可能会导致整个应用程序出现故障。 –