I want to throw a custom exception if the variable is null and return it as JSON. I’ve tried like this:
Controller
try { $check_api_key = $attendance_libraries->check_api_key($this->request); if ($check_api_key == null) { throw new NullException(false, 'API Key Not Found', null, 500); } } catch (NullException $e) { return $e; } catch (Exception $e) { // do something else }
Custom Exception
<?php namespace AppExceptions; use Exception; use IlluminateHttpResponse; class NullException extends Exception { public $is_success; public $message; public $code; public $data; public function __construct($is_success, $message, $code, $data = null, Exception $previous = NULL) { $this->is_success = $is_success; $this->message = $message; $this->code = $code; $this->data = $data; } public function render() { return response()->json([ 'success' => $this->is_success, 'message' => $this->message, 'data' => $this->data, ], $this->code); } }
But when I am trying to test it using postman, the return I got is not the same as I wrote in NullException. It becomes like this:
Advertisement
Answer
In your case you are returning the exception as a response instead of throwing it. That’s why it’s displayed like this.
You could just have to throw the exception without the try/catch:
$check_api_key = $attendance_libraries->check_api_key($this->request); if ($check_api_key == null) { throw new NullException(false, 'API Key Not Found', null, 500); }
The laravel error handler will catch the exception & render it.
EDIT: Or as @miken32 pointed out you could re throw the exception to handle other exceptions:
try { //... } catch (NullException $e) { throw $e; } catch (// other exceptions) { }