【问题标题】:CakePhp custom exception handlingCakePhp 自定义异常处理
【发布时间】:2015-07-20 16:14:48
【问题描述】:

我正在使用 CakePHP,有时会出现问题,我收到一堵错误文字。

例如

$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 错误。

我试过 try catch 子句,但结果是一样的。

如何处理此类错误?

【问题讨论】:

  • 我不确定我是否理解您的问题。你有问题,你想抛出一个特殊的异常吗?如果是,为什么不这么说呢?
  • AFAIK,这会产生 HTML 500 状态,因此您可以像处理任何 500 (book.cakephp.org/2.0/en/development/…) 一样处理它。这些新页面仅在调试设置为 0 时才会显示。

标签: php cakephp exception-handling


【解决方案1】:
ERROR_ACCOUNT_EXISTS

这是一个常量,如果未定义将导致一个致命错误,似乎没有被捕获。见How do I catch a PHP Fatal Error

此外,这听起来像是对常量的一种非常糟糕的使用,它们不应该用于消息。技术上可行吗?是的。好习惯?不,请改用 CakePHP 的翻译功能,或者如果不需要翻译,则只需在适当的位置使用。

因此,我不会首先捕获致命错误,而是通过 not 在此处使用常量来解决问题 - 或在某处定义常量。致命错误应该修复,而不是隐藏和解决。不修复致命错误甚至通知就像在腐烂的核心上涂上一些颜色并被视为不好的做法。

【讨论】:

  • 这不是我的问题,是的,我知道问题所在,我可以解决问题,但是我想问是什么导致了这堵文字墙,以及如何捕捉它而不发送它(如果有的话)出现异常错误。该异常很可能会导致我的应用程序崩溃,为了避免它我必须捕获这个错误。另外,我不能对字符串进行硬编码,因为每个字符串都可以在很多地方使用。这里应该有什么好的做法?
  • 我完全不同意。认真的问是什么原因? 错误代码。修理它。来自 php 文档:“这些表明 无法从中恢复的错误,例如内存分配问题。脚本的执行被暂停。”它根本不应该发生在任何情况下。特别是给定的问题是如此明显且易于修复:声明您的常量。
  • 是的,我会并且已经删除了变量,但这只是为了示例。但是我问了一个简单的问题,我该如何处理该死的异常,我不希望它发生在任何其他可能导致整个应用程序故障的问题上。
猜你喜欢
  • 1970-01-01
  • 2011-06-11
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 2014-02-21
  • 2019-07-15
  • 2021-07-10
相关资源
最近更新 更多