また、私の場合、jaxeryリクエスト(jquery mobile)を使用する際に、カスタム例外とエラーコードで苦労しました。ここで私が思いついた解決策は、デバッグモードを上書きすることなく。開発モードで、またオプションでプロダクションモードでカスタムエラーをスローします。
AppExceptionRenderer.php:
<?php
App::uses('ExceptionRenderer', 'Error');
class AppExceptionRenderer extends ExceptionRenderer
{
public function test($error)
{
$this->_sendAjaxError($error);
}
private function _sendAjaxError($error)
{
//only allow ajax requests and only send response if debug is on
if ($this->controller->request->is('ajax') && Configure::read('debug') > 0)
{
$this->controller->response->statusCode(500);
$response['errorCode'] = $error->getCode();
$response['errorMessage'] = $error->getMessage();
$this->controller->set(compact('response'));
$this->controller->layout = false;
$this->_outputMessage('errorjson');
}
}
}
デバッグモードで例外を表示したい場合は、Configure::read('debug') > 0
を残すことができます私はそれが誰かに役立ちます願っています。ビューerrorjson.ctpは、「Error/errorjson」にあります。CTP ':この場合
<?php
echo json_encode($response);
?>
私の例外が呼び出され
TestException
のように定義されては、次のとおりです。私は、カスタムエラーコードを持って
<?php
class TestException extends CakeException {
protected $_messageTemplate = 'Seems that %s is missing.';
public function __construct($message = null, $code = 2) {
if (empty($message)) {
$message = 'My custom exception.';
}
parent::__construct($message, $code);
}
}
2、$code = 2
、私のjsonの応答のために。 Ajaxのレスポンスは、次のJSONデータでエラー500をキャストします:
{"errorCode":"2","errorMessage":"My custom exception."}
を明らかに、あなたもあなたのコントローラから例外をスローする必要があります。
throw new TestException();
と例外レンダラーを含めhttp://book.cakephp.org/2.0/en/development/exceptions.html#using-a-custom-renderer-with-exception-renderer-to-handle-application-exceptions
これは範囲外ですが、JQueryでのajaxエラー応答を処理するために私は以下を使用します:
$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
//deal with my json error
});
デバッグモードになってから私が望んでいた答えではありませんでしたが、他の誰もこれについて考えているようではないので、正しいとマークします。努力をいただきありがとうございます! –