I want to throw a custom exception if the variable is null and return it as JSON. I’ve tried like this:
Controller
JavaScript
x
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
JavaScript
<?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:
JavaScript
$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:
JavaScript
try {
//...
} catch (NullException $e) {
throw $e;
} catch (// other exceptions) {
}