diff options
author | Bharat Mediratta <bharat@menalto.com> | 2010-06-19 13:53:22 -0700 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2010-06-19 14:07:37 -0700 |
commit | 456d54ea2dccbe55a2efd89ecb4bde29fb91b619 (patch) | |
tree | 91e7b71f4b167e99fa3e0494d358e9787300d0df /modules/rest/controllers/rest.php | |
parent | 41ca2b0195bf6a29429dfc5405f3c2073b1c3aba (diff) |
Throw exceptions as appropriate, but allow the Kohana exception
handling framework to handle the exception and delegate to our
template, which will JSON encode the response.
Diffstat (limited to 'modules/rest/controllers/rest.php')
-rw-r--r-- | modules/rest/controllers/rest.php | 41 |
1 files changed, 6 insertions, 35 deletions
diff --git a/modules/rest/controllers/rest.php b/modules/rest/controllers/rest.php index ccccc762..f8a46515 100644 --- a/modules/rest/controllers/rest.php +++ b/modules/rest/controllers/rest.php @@ -81,41 +81,12 @@ class Rest_Controller extends Controller { } $response = call_user_func(array($handler_class, $handler_method), $request); - } catch (Exception $e) { - $response = $this->_format_exception_response($e); + rest::reply($response); + } catch (ORM_Validation_Exception $e) { + // Note: this is totally insufficient because it doesn't take into account localization. We + // either need to map the result values to localized strings in the application code, or every + // client needs its own l10n string set. + throw new Rest_Exception("Bad Request", 400, $e->validation->errors()); } - - rest::reply($response); - } - - private function _format_exception_response($e) { - // Add this exception to the log - Kohana_Log::add("error", Kohana_Exception::text($e)); - - $rest_exception = array(); - if ($e instanceof ORM_Validation_Exception) { - $detail_response = true; - $rest_exception["code"] = 400; - $rest_exception["message"] = "Validation errors"; - $rest_exception["fields"] = $e->validation->errors(); - } else if ($e instanceof Rest_Exception) { - $rest_exception["code"] = $e->getCode(); - if ($e->getMessage() != "Bad Request") { - $rest_exception["message"] = "Bad Request"; - $rest_exception["fields"] = array("type", $e->getMessage()); - } else { - $rest_exception["message"] = $e->getMessage(); - } - } else { - $rest_exception["code"] = 500; - $rest_exception["message"] = t("Remote server call failed. Please contact the Adminstrator."); - } - - if (!headers_sent()) { - header($rest_exception["code"] == 500 ? "HTTP/1.1 500 Internal Server Error" : - "HTTP/1.1 400 Bad Request"); - } - - return $rest_exception; } }
\ No newline at end of file |